Ответ вслух Junior SELECT и фильтрация спрашивают часто обновлено

Как работает NULL в SQL

Вопрос

Объясни, что такое NULL в SQL и какие ловушки с ним связаны.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

NULL в SQL означает отсутствие или неизвестность значения. Из-за этого в SQL трёхзначная логика: любое сравнение с NULL, даже NULL = NULL, даёт не true и не false, а unknown, а WHERE пропускает только true.

Что должно прозвучать в ответе

  • NULL означает «значение неизвестно», а не ноль и не пустую строку

  • Сравнение с NULL через = или <> даёт unknown, WHERE такие строки отбрасывает; проверка через IS NULL

  • NOT IN со списком или подзапросом, где есть NULL, возвращает пустой результат

  • Агрегаты кроме COUNT(*) игнорируют NULL, SUM на пустом наборе даёт NULL

  • COALESCE подставляет значение по умолчанию, IS DISTINCT FROM сравнивает с учётом NULL

Что могут спросить следом

  • Почему WHERE city <> 'Москва' теряет строки?
  • Как сделать уникальный индекс, если колонка может быть NULL?
  • Чем NULL отличается от пустой строки в PostgreSQL?

Разбор

NULL в SQL означает отсутствие или неизвестность значения. Из-за этого в SQL трёхзначная логика: любое сравнение с NULL, даже NULL = NULL, даёт не true и не false, а unknown, а WHERE пропускает только true. Поэтому email = NULL всегда пусто, проверяют через IS NULL. Вторая ловушка: city <> 'Москва' теряет строки с пустым городом. Третья, самая опасная: NOT IN по подзапросу, где есть хоть один NULL, вернёт пустой результат, поэтому для «нет в списке» лучше NOT EXISTS. Четвёртая: агрегаты, кроме COUNT(*), пропускают NULL, AVG считает среднее только по известным, а SUM на пустом наборе даёт NULL, отсюда COALESCE(SUM(x), 0). Для сравнения с учётом NULL есть IS DISTINCT FROM. И в PostgreSQL пустая строка это значение, а не NULL, в отличие от Oracle.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.