SQL NULL等于且不等于NULL

时间:2017-04-06 03:37:01

标签: sql

我知道SQL中的NULL是一个未知值,因此NULL不等于NULL,因为两者都是未知的,但我期待第二个IF返回not eq,而是返回eq。为什么?我错过了什么?为什么他们都评价其他?

declare @i int = null
declare @i2 int = null

if @i = @i2 select 'eq' else select 'not eq'
if @i <> @i2 select 'not eq' else select 'eq'

2 个答案:

答案 0 :(得分:1)

最简单的是,这可以解释为:

  1. NULL的值未知(或该值不存在)
  2. 在此基础上,涉及NULL(例如,等级=,不等式<>,大于/小于'&gt;')的任何比较的值都会评估为未知(即NULL本身)。因此,@i = @i2@i <> @i2都会返回相同的UnknownNULL结果。
  3. 由于NULL或未知不是True,控件始终会分支到ELSE块,而不会分支到THEN块。

答案 1 :(得分:0)

NULL是SQL中的已知值(和大多数字符集)。

在替换变量后的问题中,您的第二次测试等同于NULL <> NULL。由于某些东西既不大也不小,你的测试返回false,因此SELECT返回eq

注意:如果遇到无法识别或无效的值,某些函数以及某些操作可能会返回NULL。因此,即使值不等于NULL函数的值也可以这样做。即value <> NULLFUNCTION_1( value ) = NULL可能仍然是真的。