Este post foi originalmente publicado em https://officevbavsto.blogspot.com/2011/05/quickshot-deixando-consulta-mais-rapida.html.

Quem aqui que usa Access nunca precisou fazer uma consulta usando o critério “Not In”? Pois é, e quem trabalha com um grande volume de dados sabe que quando se usa esse critério, pode ir tomar um café porque isso vai demorar, principalmente se realizar busca por texto.

A expressão abaixo retorna quais a linhas da tabela EMPRESA não estão cadastradas na tabela TABELA_SOCIOS, sem a utilização do NOT EXISTS, mas utilizando o NOT IN - isto é somente um exemplo para se comparar as duas maneiras de executar a mesma operação.

SELECT * FROM EMPRESAS
WHERE EMPRESAS.CD_EMPRESA NOT IN (SELECT TABELA_SOCIOS.CD_EMPRESA FROM TABELA_SOCIOS WHERE EMPRESAS.CD_EMPRESA = TABELA_SOCIOS.CD_EMPRESA)

A expressão abaixo retorna quais a linhas da tabela EMPRESA não estão cadastradas na tabela TABELA_SOCIOS utilizando o NOT EXISTS.

SELECT * FROM EMPRESAS WHERE NOT EXISTS (SELECT TABELA_SOCIOS.CD_EMPRESA FROM TABELA_SOCIOS WHERE EMPRESAS.CD_EMPRESA = TABELA_SOCIOS.CD_EMPRESA)

Normalmente, DBAs recomenda o uso do NOT EXISTS, ao invés de NOT IN, por questões de performance.

Créditos

Photo by Chander R on Unsplash