В таблице orders поле promo_code может быть NULL. Что произойдёт со строкой, где promo_code = NULL, при фильтре WHERE promo_code <> 'NONE'?

AСтрока попадёт в результат, потому что NULL считается «не равным» строке 'NONE'
BСтрока не попадёт в результат, потому что выражение promo_code <> 'NONE' даёт UNKNOWN
CСтрока попадёт в результат только если в запросе указан ORDER BY promo_code
DЗапрос упадёт с ошибкой, потому что оператор <> нельзя применять к NULL
Правильный ответ. Сравнение с NULL даёт UNKNOWN, а в WHERE остаются только строки со значением TRUE.

Разбор

В трёхзначной логике сравнение NULL <> 'NONE' возвращает не TRUE и не FALSE, а UNKNOWN. Условие WHERE пропускает только TRUE, поэтому строки с NULL отбрасываются. Чтобы такие строки явно включить, добавляют OR promo_code IS NULL или используют COALESCE(promo_code, '...') в зависимости от смысла фильтра.

Проверь себя · 1/3разбор после ответа
В выражении CASE ветки проверяются сверху вниз. Что вернёт CASE WHEN amount IS NULL THEN 'missing' WHEN amount = 0 THEN 'zero' ELSE 'positive' END для строки, где amount равен NULL?
Тренировать SQL в Telegram

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