IN运算符SQL

Aks*_*y J 3 sql sql-server

我有一个名为NUMS的表,其中有一列n.
我在其中填充值1,2,3,4,5,null.

现在是查询

SELECT n FROM Nums 
 WHERE n IN (1, 2, null)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我猜它已转换为

SELECT n FROM Nums 
 Where n = 1 OR n = 2 OR n = null   
Run Code Online (Sandbox Code Playgroud)

我也将n与null值进行比较,该值应该产生未知,并且它应该返回一个空集.但是它返回1,2(null不返回,尽管包含在IN运算符中)

现在是查询

SELECT n FROM Nums WHERE n NOT IN(1, 2, null)  
Run Code Online (Sandbox Code Playgroud)

...转换为:

SELECT n FROM Nums 
 Where n!=1 AND n!=2 AND n!=null  
Run Code Online (Sandbox Code Playgroud)

这里我上面所说的工作,并没有返回任何东西.

任何人都可以详细解释发生了什么.

Joh*_*n G 5

这是因为null = null用于null的运算符始终为false IS或者IS NOT 您可以使用下面的查询来获得预期的输出

SELECT n FROM Nums WHERE n IN (1,2) OR n IS NULL
Run Code Online (Sandbox Code Playgroud)

[编辑] Thanx @Buckwad