Назад к вопросам
Senior
6
Как изменится результат если условие фильтрации перенести из ON в WHERE при JOIN?
Компании, где спрашивали
Алабуга
Ответ от нейросети
sobes.tech AI
При использовании JOIN в SQL условие фильтрации, помещённое в ON, влияет на то, какие строки из присоединяемой таблицы будут включены в результат до объединения. Если же это условие перенести в WHERE, то сначала происходит объединение таблиц по условию ON, а затем фильтрация уже по результату объединения.
Это особенно заметно при LEFT JOIN и подобных:
- Если условие фильтрации в ON, то строки из левой таблицы без совпадений в правой сохраняются (с NULL в полях правой таблицы).
- Если условие перенести в WHERE, то такие строки будут отфильтрованы, так как условие WHERE применяется после объединения и исключает строки с NULL.
Пример:
SELECT * FROM A
LEFT JOIN B ON A.id = B.a_id AND B.status = 'active'
и
SELECT * FROM A
LEFT JOIN B ON A.id = B.a_id
WHERE B.status = 'active'
во втором случае строки из A без активных записей в B будут исключены, а в первом — сохранены с NULL в полях B.
Таким образом, перенос условия из ON в WHERE может изменить количество и состав строк в результате запроса.