如果没有记录符合ICAO ='YXTO'
SELECT 1, ISNULL((SELECT ID FROM Location WHERE ICAO='YXTO'),2)
返回1,2
尽管
SELECT 1, (SELECT ISNULL(ID,2) FROM Location WHERE ICAO='YXTO')
返回1,NULL
发生了什么事?当没有记录可以作用时,ISNULL不会返回值吗?
答案 0 :(得分:6)
这是正确的。
在第一种情况下,子查询是标量子查询。如果没有匹配项,则结果为NULL
。这是作为ISNULL()
的参数传递的,因此返回2
。
在第二种情况下,子查询也是标量子查询。如果没有匹配项,它也会返回NULL
- 没有返回任何行,因此永远不会调用ISNULL()
。没有任何东西捕获NULL
,因此返回NULL
。