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

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

Разбор

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

Проверь себя · 1/3разбор после ответа
Есть выражение для маржи: revenue - cost. Что получится, если revenue = 1000, а cost = NULL? И какой вариант устойчиво вернёт 1000 при пропуске cost?
Тренировать SQL в Telegram

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