Oracle SQL NOT IN and NOT EXISTS returning different values. Why?
That is normal behaviour. NOT IN and NOT EXISTS is not the same. They return same results only as long as nulls are not involved.

SQL&gt; create table tablea (id number);

Table created.

SQL&gt; create table tableb (id number);

Table created.

SQL&gt; insert into tablea values(1);

1 row created.

SQL&gt; insert into tablea values(2);

1 row created.

SQL&gt; insert into tableb values(2);

1 row created.

SQL&gt; insert into tableb values(3);

1 row created.

SQL&gt; commit;

Commit complete.

SQL&gt; select ID from tableA where ID not in (select ID from tableB);

        ID
----------
         1

SQL&gt; select ID from TableA A where NOT EXISTS (select ID from tableB B where B.ID = A.ID);

        ID
----------
         1

SQL&gt; insert into tableb values (null);

1 row created.

SQL&gt; commit;

Commit complete.

SQL&gt; select ID from tableA where ID not in (select ID from tableB);

no rows selected

SQL&gt; select ID from TableA A where NOT EXISTS (select ID from tableB B where B.ID = A.ID);

        ID
----------
         1


Your subquery returns nulls.