IN子句中的空值 - Teradata

时间:2014-04-16 13:54:55

标签: sql teradata

这是我的Table1

personid
1
?
2
3
4
?
6

这是我的查询

select * 
from table2
where personid not in 
(
select personid
from table1
)

结果为nothing


这是我的第二个查询

select * 
from table2
where personid not in 
(
select personid
from table1         
where personid is not null
)

结果为ok


问题:为什么第一个查询不起作用?我看不出任何逻辑问题。 null是否可以了解teradata?

2 个答案:

答案 0 :(得分:5)

它并非特定于Teradata,它在所有RDBMS中都是相同的(或至少应该是相同的)。与NULL的任何比较导致UNKNOWN和NOT IN是ANDed条件:

personid<> 1st_value_in_list AND personid<> 2nd_value_in_list AND ... AND personid<> NULL

这已经多次讨论,例如 NOT IN clause and NULL values

答案 1 :(得分:1)

是。如果子查询中的某个值为NULL,则IN子句不返回任何内容。