SQL与null的比较与运算

在SQL中,任何与NULL值的比较结果都不是TRUE或FALSE,而是UNKNOWN。这意味着当你使用不等于(<>)或其他比较运算符时,如果其中涉及到了NULL值,那么这些比较都不会返回TRUE。

同理 ,与NULL值进行运算,如+,-,*,返回的结果都是NULL 


select *  from a join b on a.id=b.parentid where b.nameNum<>999

-

这条SQL中where id<>999的条件是在a表和b表join后进行的,如果join后合并表有nameNum为null的,那么这个id将不会被筛出。

想要值为null的ID,可以这样做:

select *  from a join b on a.id=b.parentid where isnull(b.nameNum,9999)<>999

或者

select *  from a join b on a.id=b.parentid where b.nameNum<>999 or  b.nameNum is null

或者(先在B表中过滤后再join)

select *  from a join (select *  from b where b.nameNum<>999)  c on a.id=c.parentid