SNEG,
Для индексов с одним столбцом UNIQUE, когда MySQL находит первую строку, которая соответствует критериям поиска, он знает, что другие строки не могут иметь такое же значение. Поэтому он вернет результат.
Да, добавление LIMIT 1 в SQL-запрос имеет смысл даже если поле email уникальное, и вот почему:
email в БД уже объявлен как UNIQUE, значит, максимум один результат может быть возвращён.
Однако без LIMIT 1 MySQL всё равно будет сканировать данные до конца (если не использует индекс эффективно) — особенно если есть сложные условия, отсутствует подходящий индекс, или используется AND/OR.
Поэтому:
SELECT `id`, `password`
FROM `prefix_users`
WHERE `email` = 'user@example.com' AND `password` = 'secret'
LIMIT 1
Добавление LIMIT 1 даёт две вещи:
Подсказка для оптимизатора: MySQL может остановить выполнение после первого совпадения.
Повышение производительности, особенно при отсутствии хорошего индекса (в твоём случае email уже индексирован, но AND password = ... может мешать идеальному плану запроса).
Кстати: проверку пароля лучше делать через password_verify(), а не прямым сравнением в SQL — это безопаснее и гибче.