LEFT JOIN: ON или WHERE — есть разница?

Ответ

Да! Условие в ON применяется ДО объединения — несоответствующие строки правой таблицы сохраняются, а её поля становятся NULL. Условие в WHERE применяется ПОСЛЕ — строки с NULL отфильтровываются, и LEFT JOIN превращается в INNER JOIN.

Разбор: Условие на правую таблицу в ON применяется ДО соединения: несовпавшие строки сохраняются, а поля правой таблицы становятся NULL. То же условие в WHERE применяется ПОСЛЕ соединения и отсекает строки с NULL, фактически превращая LEFT JOIN в INNER JOIN. Ловушки: оптимизатор не эквивалентен в этих случаях, и порядок применения именно ON-до / WHERE-после, а не наоборот.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться