Вступить в клуб →
средняявопросSQL и оптимизация запросов

NOT IN по подзапросу с NULL перестал возвращать строки

Проверка «заказы не заблокированных клиентов» работала месяцами и вдруг стала возвращать 0. В справочнике dds.blocked_clients 12 строк, и после последней загрузки в одной из них client_id оказался NULL.

SELECT count(*)
FROM dds.orders o
WHERE o.client_id NOT IN (SELECT client_id FROM dds.blocked_clients);

Что вернёт запрос и почему?

  • Заказы всех клиентов, кроме 11 заблокированных: строка с NULL просто не участвует в сравнении.
  • Ошибку: подзапрос с NULL нельзя использовать в NOT IN.
  • Все заказы без исключения: NULL в списке отключает фильтрацию, но остальные значения тоже перестают учитываться.
  • 0 — сравнение с NULL даёт UNKNOWN, и условие NOT IN не выполняется ни для одной строки.

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела