Я с удивлением вижу, что IS NULL и = NULL дают разные результаты в выбранном запросе. В чем разница между ними? Когда использовать что. Я был бы рад, если вы сможете объяснить мне подробно.
Есть ли разница между IS NULL и = NULL
Ответ 1
= NULL
всегда unknown
(это часть из трех логических состояний), но предложение WHERE
рассматривает его как false
и падает из результирующего набора. Поэтому для NULL
вы должны использовать IS NULL
Причины описаны здесь: Почему NULL = NULL оценивает значение false на сервере SQL.
Ответ 2
Чтобы добавить к существующим ответам, зависит от того, есть ли у вас ANSI_NULLS или нет, при использовании "= NULL".
-- This will print TRUE
SET ANSI_NULLS OFF;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
-- This will print FALSE
SET ANSI_NULLS ON;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
Ответ 3
Существует разница между IS NULL
и = NULL
, и это из-за трехзначной логики SQL:
https://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29
Извлечение соответствующего абзаца:
Challenges
Нуль был в центре противоречий и источником дискуссия из-за связанной с ней трехзначной логики (3VL), специальной требования к его использованию в соединениях SQL и особая обработка требуется агрегатными функциями и операторами группировки SQL. компьютер Профессор науки Рон ван дер Мейден суммировал следующие вопросы: "Несоответствия в стандарте SQL означают, что это невозможно приписывать любую интуитивную логическую семантику обработке нулей в SQL. "Хотя различные предложения были сделаны для решения этих проблемы, сложность альтернатив помешала их широкое распространение.