I am receiving different results from the following two queries and do not understand why. Shouldn't this NOT IN
query return the same result as the NOT EXISTS
query?
SELECT p.pid, p.pname, w.salary
FROM Person p, worksFor w
WHERE p.pid = w.pid AND NOT EXISTS (SELECT *
FROM worksFor w1,Knows k
WHERE w1.pid = k.pid1 AND w1.cname = w.cname AND w1.pid <> w.pid AND k.pid2 = w.pid);
SELECT p.pid, p.pname, w.salary
FROM Person p, worksFor w
WHERE p.pid = w.pid AND 1 NOT IN (SELECT 1
FROM worksFor w1, Knows k
WHERE w1.pid = k.pid1 AND w1.cname = w.cname AND w1.pid <> w.pid AND k.pid2 = w.pid);
pid | pname | salary
------+----------+--------
1002 | Vidya | 45000
1007 | Danielle | 50000
1010 | Linda | 55000
1011 | Nick | 70000
1013 | Lisa | 55000
1016 | YinYue | 55000
1018 | Arif | 50000
1019 | John | 50000
pid | pname | salary
------+----------+--------
1007 | Danielle | 50000
1012 | Eric | 50000
1017 | Latha | 60000
1018 | Arif | 50000
1019 | John | 50000
(5 rows)