Какой фильтр в WHERE корректно оставит только строки, где столбец channel задан (не равен NULL)?

AWHERE channel IS NOT NULL: отбираются строки со значением, отличным от NULL
BWHERE channel <> NULL: сравнение с NULL через <> пропускает заполненные строки
CWHERE COALESCE(channel, 'unknown') = 'unknown': остаются строки с NULL или со значением 'unknown'
DWHERE channel = NULL: сравнение = с NULL пропускает строки с заполненным channel
Правильный ответ. Проверка «не равно NULL» делается через IS NOT NULL, а не через <> или =.

Разбор

Сравнения channel <> NULL и channel = NULL не работают как ожидается, потому что результат таких сравнений — UNKNOWN, и строка не проходит фильтр. Правильный способ отобрать строки с заполненным значением — WHERE channel IS NOT NULL. Вариант COALESCE(channel, 'unknown') = 'unknown', наоборот, отбирает строки, где channel равен NULL, а не наоборот. Это базовая ловушка трёхзначной логики в SQL.

Проверь себя · 1/3разбор после ответа
В таблице orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?
Тренировать SQL в Telegram

Ещё вопросы по теме «Выражения и NULL»