Есть ли разница между 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. "Хотя различные предложения были сделаны для решения этих проблемы, сложность альтернатив помешала их широкое распространение.