Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Postgres: join, condition, where, clause

В чем разница между условиями в JOIN ... ON и WHERE?

Вопрос проверяет понимание порядка выполнения SQL-запроса и влияния условий на результат соединений.

Короткий ответ

ON задаёт условия соединения таблиц.
WHERE фильтрует результат после выполнения JOIN.
Для INNER JOIN разница часто не видна.
Для LEFT JOIN и других внешних соединений разница принципиальна.
Неправильное размещение условия может изменить результат запроса.

Длинный ответ

Чтобы понять разницу, важно помнить логический порядок обработки SQL.

Роль JOIN ... ON

Определение:
Условие в ON определяет, какие строки считаются совпадающими при соединении таблиц.

Особенности:

  1. Применяется в момент выполнения JOIN.

  2. Влияет на формирование строк результата соединения.

  3. Особенно важно для внешних соединений.

Пример:

SELECT *
FROM orders o
LEFT JOIN payments p
    ON o.id = p.order_id AND p.status = 'SUCCESS';

Здесь:

  • условие p.status = 'SUCCESS' влияет только на соединение

  • строки из orders сохраняются даже без подходящих payments

Роль WHERE

Определение:
WHERE фильтрует строки после того, как соединение уже выполнено.

Пример:

SELECT *
FROM orders o
LEFT JOIN payments p
    ON o.id = p.order_id
WHERE p.status = 'SUCCESS';

В этом случае:

  1. Сначала выполняется LEFT JOIN.

  2. Затем строки с p.status IS NULL отбрасываются.

  3. LEFT JOIN фактически превращается в INNER JOIN.

Почему это важно

Ошибки часто возникают, когда:

  1. Условия фильтрации по правой таблице пишут в WHERE.

  2. Ожидают поведение LEFT JOIN, а получают INNER JOIN.

Краткий вывод

ON определяет логику соединения таблиц, а WHERE фильтрует уже полученный результат, что критично для внешних JOIN.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Postgres

    Postgres

Ключевые слова

#join

#condition

#where

#clause

Подпишись на Java Developer в телеграм