Digamos que seu primeiro
INNER JOIN
retorna 75% das 1.000.000 linhas em table1
. A segunda consulta não retorna as 250.000 outras linhas como você pensa. Em vez disso, ele tenta criar um produto cartesiano e remover as 750.000 linhas correspondentes. Assim, está tentando retornar 6.000.000 × 1.000.000-750.000 linhas. Esse é um conjunto de resultados de 6 × 10 linhas. Você provavelmente quer isso:
SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL
Isso retorna linhas em
table1
não está presente em table2
. Você também pode estar interessado em
FULL OUTER JOIN
:SELECT * FROM table1
FULL OUTER JOIN table2 ON table2.number = table1.number
WHERE table1.number IS NULL AND table2.number IS NULL
Isso retorna linhas em ambas as tabelas que não têm correspondência na outra tabela.