SQL Server 2005 - 在比较中使用Null

Jim*_*m B 4 sql comparison null sql-server-2005

这更像是一个满足我自己好奇心的问题.鉴于以下声明:

DECLARE @result BIT
SET @result = CASE WHEN NULL <> 4 THEN 0
                   ELSE 1
              END
PRINT @result
Run Code Online (Sandbox Code Playgroud)

为什么我回到"1"而不是"0"

将其更改为:

DECLARE @result BIT
SET @result = CASE WHEN NULL IS NULL
                        OR NULL <> 4 THEN 0
                   ELSE 1
              END
PRINT @result
Run Code Online (Sandbox Code Playgroud)

正确地给我回"0"

我知道NULL比较可能很棘手,但这个特殊的例子在我们的代码审查过程中滑落了.

任何澄清将不胜感激

Mar*_*ith 9

这是因为3值逻辑.在第一种情况下,Unknown不会评估为true,因此您最终会进入else

DECLARE @result BIT
SET @result = CASE WHEN Unknown THEN 0
                   ELSE 1
              END
PRINT @result
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,您执行True或Unknown,其值为true.

DECLARE @result BIT
SET @result = CASE WHEN True
                        OR Unknown THEN 0
                   ELSE 1
              END
PRINT @result
Run Code Online (Sandbox Code Playgroud)