IN子句中的空值 - Teradata

Bur*_*ras 1 sql teradata

这是我的Table1

personid
1
?
2
3
4
?
6
Run Code Online (Sandbox Code Playgroud)

这是我的查询

select * 
from table2
where personid not in 
(
select personid
from table1
)
Run Code Online (Sandbox Code Playgroud)

结果是 nothing


这是我的第二个查询

select * 
from table2
where personid not in 
(
select personid
from table1         
where personid is not null
)
Run Code Online (Sandbox Code Playgroud)

结果是 ok


问题:为什么第一个查询不起作用?我看不出任何逻辑问题.是的,是否可以null提升teradata?

dno*_*eth 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子句和NULL值