Дано выражение: CASE WHEN status = 'paid' THEN amount ELSE 0 END. Что вернётся, если status равно NULL, а amount равно 500?

AВернётся NULL, потому что любое участие NULL в выражении автоматически делает результат неопределённым
BВернётся 0: условие status = 'paid' даёт UNKNOWN из-за NULL, и поэтому сработает ветка ELSE
CВернётся 500: значение amount подставится напрямую, ведь поле status не равно строке 'paid'
DБудет ошибка выполнения, потому что сравнение со значением NULL запрещено в выражении CASE
Правильный ответ. Если условие WHEN даёт не TRUE (включая UNKNOWN из-за NULL), сработает ветка ELSE.

Разбор

При status = NULL сравнение status = 'paid' возвращает UNKNOWN, а не TRUE или FALSE. В выражении CASE ветка WHEN срабатывает только при TRUE, поэтому в нашем случае выберется ELSE 0, и результат будет 0, даже если amount равно 500. Чтобы явно учитывать пропуски, можно добавить отдельную ветку WHEN status IS NULL THEN .... Запрета на сравнение с NULL в CASE нет — оно просто даёт UNKNOWN.

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

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