SQL: Diferenças entre Not IN e Not EXISTS e Performance

Compartilhe:

Not IN e Not EXISTS são cláusulas SQL ANSI, um padrão da linguagem SQL seguido pela maior parte dos SGBDs (sistema de gerenciamento de banco de dados).

Essa especificação é relativa a uma padronização de nome de cláusulas. Isso significa que o mesmo nome pode ser usado tanto no SQL Server, quanto no PostgreSQL, MySQL e assim por diante. Algumas cláusulas que seguem o mesmo padrão, são o INSERT, UPDATE e DELETE, por exemplo.

LEIA TAMBÉM:

EXISTS é mais performático do que o IN, porém não vem a ser uma boa pratica, depende da sua necessidade….

O in “cria” uma estrutura de or’s na sua condição sql, exp:

select * from tabela1
where idtabela in (select idtabela from tabela2 where condicao = 2)

Digamos que existam 5 condições = 2 de idtabela nessa tabela2 , o bd interpretaria o in como:

select * from tabela1 t
inner join tabela2 t2 on t2.idtabela = t.idtabela
where idtabela = 1 or idtabela = 2 or idtabela = 3 or idtabela = 4 or idtabela = 5

Agora ao usar o exists o bd “força” um relacionamento entre as duas tabelas Ficando mais ou menos assim:

Apoie a Ramos da Informática

Café com Deus Pai Vol. 6 - 2026: Porções Diárias de Amor oferece 365 mensagens diárias que convidam você a um encontro íntimo com Deus, fortalecendo a fé e nutrindo a alma.

👉 Confira na Amazon .
Nas compras você contribui para manter o site no ar.

Certificado MEC

Domine Bancos de Dados como um
Engenheiro de Dados de Elite

SQL, NoSQL, BigQuery, Databricks, SSIS + Python
Saia do zero e conquiste R$11.000/mês em 6 meses.
200h+ de projetos reais com ferramentas do Google, Amazon e Netflix.

Garanta Sua Vaga com 7 Dias de Garantia

select * from tabela1 t
inner join tabela2 t2 on t2.idtabela = t.idtabela
where condicao = 2

Vamos usar outro exemplo:

NOT IN

SQL> select count(*) from emp_master where emp_nbr not in ( select mgr_nbr from emp_master );
COUNT(*)
———-
0

 NOT EXISTS

SQL> select count(*) from emp_master T1 where not exists ( select 1 from emp_master T2 where t2.mgr_nbr = t1.emp_nbr );

COUNT(*)
———-
9

Agora, existem 9 pessoas que não são gestores. Assim, você pode ver claramente a diferença que valores NULL fazem desde que NULL! = NULL no SQL, a cláusula NOT IN não retorna nenhum registro de volta.

Como aprender a programar, um guia definitivo

Implicações de desempenho:

Ao usar NOT IN, a consulta executa varreduras aninhados de tabela, enquanto que para NOT EXISTS, a consulta pode utilizar um índice dentro da sub-consulta.

LIVROS SQL E BANCO DE DADOS RECOMENDADOS:

1. SQL para Análise de Dados: Técnicas avançadas para transformar dados em insights

2. Sistemas de Banco de Dados

Curso Banco de Dados

 

Conforme mencionado, estes scripts SQL podem ser usados tranquilamente em outros SGBDs, por se tratar de SQL ANSI. Evidentemente que, para mostrar estes mesmos resultados, você terá que ter tabelas e dados iguais.

LEIA TAMBÉM: 21 comandos SQL essenciais para programadores e BI

Bons estudos.

Leia também:

Apoie a Ramos da Informática

Café com Deus Pai Vol. 6 - 2026: Porções Diárias de Amor oferece 365 mensagens diárias que convidam você a um encontro íntimo com Deus, fortalecendo a fé e nutrindo a alma.

👉 Confira na Amazon .
Nas compras você contribui para manter o site no ar.

Compartilhe:

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade sobre linguagens de programação, banco de dados, DevOps, Internet das Coisas, tecnologia da indústria 4.0, Cyber Segurança e Startups.
🔥 Oferta Gamer

NITRO V15

Poder Total em Suas Mãos

N
🚀
Processador
Ryzen 7 7735HS
🎮
GPU
RTX 4050 6GB
RAM + SSD
16GB + 512GB
🖥️
Tela
15.6" FHD 165Hz
Ray Tracing DLSS 3.0 DDR5 Wi-Fi 6 RGB Backlit
Confira na Amazon
OFERTA!
Ver na Amazon
✓ Entrega Rápida ✓ Garantia