I have the following query (simplified) on MS Access:
SELECT * FROM table1 WHERE table1.ID NOT IN (SELECT DISTINCT table1id FROM table2);
M
Generally, the problem with IN and NOT in has to do with NULLs in the subselect. Try this and see if it works:
SELECT * FROM table1 WHERE table1.ID NOT IN (SELECT DISTINCT table1id FROM table2 where tableid is not null);