NULL в SQL: IS NULL и COALESCE

Пустая графа в картотеке — не «ноль» и не «отсутствует». Это призрак: неизвестно. И призрак ведёт себя не так, как вы ждёте ни от нуля, ни от пустой строки.

Обычная логика знает ДА и НЕТ. Здесь есть третье — НЕИЗВЕСТНО. Сравнение с призраком никогда не даёт ни ДА, ни НЕТ — только «неизвестно», и строка вылетает из выдачи молча.

WHERE phone = NULL
-- всегда пусто, ошибки нет — просто тишина
WHERE phone IS NULL
-- вот так призрака действительно находят
«= NULL не спрашивает „это призрак?“. Он спрашивает „равно ли неизвестное неизвестному“ — и получает третий ответ, не ДА и не НЕТ.»

Чем заткнуть пустую графу?

Затыкают призрака через COALESCE — берёт первое непустое значение из списка.

SELECT COALESCE(nickname, name, 'без имени') AS отображаемое
FROM contacts;

А NULLIF делает призрака нарочно — если два значения равны, подставляет пустоту. Классика — защита от деления на ноль.

SELECT amount / NULLIF(count, 0) AS среднее
FROM receipts;
-- count=0 → NULLIF даёт NULL → деление не падает, просто молчит

Почему запрос возвращает пусто — и никто не жалуется?

Капкан — тот же, что и в первом уроке, но здесь он бьёт сильнее: WHERE status <> 'закрыто' выбросит не только чужой статус, но и все строки, где статус вообще не заполнен. Пустая графа не отвечает „да“ вообще ни на что.

«Запрос, что всегда возвращает пусто, — не значит „никто не виноват“. Значит: вопрос задан так, что призрак прошёл сквозь него незамеченным.»

На работе призрак объясняет половину случаев «цифры не сходятся»: пропуски в данных ведут себя не как ноль, а как дыра, через которую утекает часть строк — незаметно, без единой ошибки в консоли.

Призрак есть в каждом деле архива. Найдите его первым — до того, как он тихо перепишет вам ответ.

$0
тащи карточки за верхнюю кромку · «+ стикер» · «🧵 нить» — клик по двум

ЛОТОК УЛИК

во вкладке SQL найди подозреваемых и жми «+ доска»

НА ПРОВЕРКУ

теории из «Заметок» отправляются сюда — подтверди на доске или удали
Ctrl+Enter · «+ доска» на строке — выбрать поля и перенестипиши запрос, я подожду
Результат появится здесь.

Картотека

Заметки

Факты

Теории на проверку

Подсказки

◆ РЕЖИМ АРХИВАРИУСАуправление картотекой дел · не виден игроку