Если мы ставим условие фильтрации по дате транзакции в WHERE (после LEFT JOIN), обрежет ли это результат по первой таблице (клиентам)?

Да, условие WHERE по дате правой таблицы обычно исключит клиентов без подходящей транзакции. Чтобы сохранить всех клиентов, перенесите фильтр в ON.

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

Что ответить на собеседовании

Да, условие WHERE по дате правой таблицы обычно исключит клиентов без подходящей транзакции. Чтобы сохранить всех клиентов, перенесите фильтр в ON.

Подробный разбор

Ответ с пояснениями

Да, условие WHERE по дате правой таблицы обычно исключит клиентов без подходящей транзакции. Чтобы сохранить всех клиентов, перенесите фильтр в ON.

Сравнение t.transaction_date >= DATE '2026-01-01' для строки без транзакции даёт UNKNOWN, поэтому WHERE её отбрасывает.

SELECT c.id, t.transaction_date
FROM clients c
LEFT JOIN transactions t
  ON t.client_id = c.id
 AND t.transaction_date >= DATE '2026-01-01';

Так сохранятся и клиенты без транзакций, и клиенты только со старыми транзакциями. Добавление OR t.transaction_date IS NULL в WHERE не всегда эквивалентно переносу фильтра в ON.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее