Sobes.tech
Back to questions
Senior
7

Как изменится результат если условие фильтрации перенести из ON в WHERE при JOIN?

Companies where asked
Алабуга

Answer from AI

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 может изменить количество и состав строк в результате запроса.