没有记录返回时,ISNULL()不返回值

str*_*onn 3 sql t-sql

在没有记录匹配ICAO ='YXTO'的情况下

SELECT 1, ISNULL((SELECT ID FROM Location WHERE ICAO='YXTO'),2)
Run Code Online (Sandbox Code Playgroud)

返回1,2

SELECT 1, (SELECT ISNULL(ID,2) FROM Location WHERE ICAO='YXTO')
Run Code Online (Sandbox Code Playgroud)

返回1,NULL

发生了什么?当没有记录可以执行时,ISNULL不会返回值吗?

Gor*_*off 6

那是正确的.

在第一种情况下,子查询是标量子查询.当没有匹配时,结果是NULL.这是作为参数传递的ISNULL(),因此2返回.

在第二种情况下,子查询也是标量子查询.当没有匹配时,它也会返回NULL- 没有返回任何行,因此ISNULL()永远不会被调用.什么都没有捕获NULL,因此NULL返回.