Oracle不一致的sql结果

Oracle不一致的sql结果,sql,oracle,subquery,Sql,Oracle,Subquery,我有三个完全相同的sql查询。但是,其中一个没有返回任何结果。我找不到对这个问题的适当解释 任何能 --returns one result SELECT col1 FROM table1 WHERE col1 not IN (select x.hesno from (SELECT c1||c2||c3 FROM Table2 S) x) ; --returns no result SELECT col1 FROM table1 WHERE col

我有三个完全相同的sql查询。但是,其中一个没有返回任何结果。我找不到对这个问题的适当解释

任何能

--returns one result
   SELECT col1
   FROM table1
   WHERE col1  not IN
   (select x.hesno from (SELECT c1||c2||c3 FROM Table2 S) x) ; 

--returns no result
   SELECT col1
   FROM table1
   WHERE col1  not IN
     (SELECT c1||c2||c3 FROM table2)  ;


--returns one result
   SELECT col1
   FROM Table1
   WHERE NOT EXISTS (
     SELECT 1 FROM table2 WHERE c1||c2||c3 = col1
   );
这是表格说明

Table1
Name   Null? Type          
------ ----- ------------- 
COL1          VARCHAR2(15)  

Table2
Name            Null? Type          
--------------- ----- ------------- 
C1                    VARCHAR2(2)   
C2                    VARCHAR2(3)   
C3                    VARCHAR2(10)

如果子查询在
内而不是在(子查询)
内返回空值,则查询不会返回行

下面的SQL返回
12345

With WTH0 AS (
  SELECT '12345' x FROM dual
),
WTH1 AS (
  SELECT '1' c1, '2' c2, '3' c3 FROM dual
)
SELECT X 
FROM WTH0
WHERE X NOT IN (SELECT C1||C2||C3 FROM WTH1);
鉴于

With WTH0 AS (
  SELECT '12345' x FROM dual
),
WTH1 AS (
  SELECT '1' c1, '2' c2, '3' c3 FROM dual union
  SELECT null c1, null c2, null c3 FROM dual
)
SELECT X 
FROM WTH0
WHERE X NOT IN (SELECT C1||C2||C3 FROM WTH1);

返回空结果集。

如果子查询返回空值,NOT IN将不会返回任何行。“我有三个完全相同的sql查询”-这显然不是真的;也许你的意思是他们(你相信)在逻辑上是一样的?但是,您的第一个查询甚至无效,因为内部子查询没有
hesno
的别名。如果你得到的结果与前两个不同,并且存在别名,那么这就稍微有趣一点;与前两个不同的第三个结果可能不是(请参阅关于null的注释/回答)。无论哪种方式,请显示示例数据以及使用该数据得到的实际查询和结果。