今天在MSN Blog中,偶然看到同事抱怨用OLEDB连接数据库执行SQL,用"=NULL"不能返回想要的结果集,但用"Is NULL"却可以。因此,他认为这是数据库的一个Bug。
其实,在数据库中,NULL值表示Unknow。所以,SQL92标准规定NULL不能用=、>、<比较,而需要用IS (NOT) NULL。
某些数据库允许不按照SQL92标准进行NULL比较,但此时返回的值是不确定的。如果你事先给字段赋了NULL值,则“=NULL”可以返回TRUE;反之,数据库通常会对这种比较进行忽略。
为了保证结果的唯一性,推荐所有地方都使用IS (NOT) NULL。
可以参见MSDN的相关文章。