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:
Dê um Salto na Sua Carreira!
Receba dicas práticas, soluções objetivas e insights exclusivos que já impactaram mais de 5.000 profissionais.
🚀 Aprimore suas Habilidades DevOps!
Descubra como otimizar fluxos de trabalho, melhorar a integração contínua e revolucionar o gerenciamento de projetos no mundo DevOps. Acesse agora!
Saiba Mais💻 Torne-se um Desenvolvedor Fullstack!
Domine as tecnologias mais requisitadas do mercado e conquiste sua carreira dos sonhos como Desenvolvedor Fullstack. Inscreva-se hoje!
Inscreva-seselect * 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:
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
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:
Gostou deste conteúdo?
Assine o E-Zine Ramos da Informática e receba semanalmente conteúdos exclusivos focados em desenvolvimento frontend, backend e banco de dados para transformar sua carreira tech.
📘 Conteúdo exclusivo
Dicas, insights e guias práticos sobre desenvolvimento e bancos de dados.
🚀 Hacks de carreira
Ferramentas e estratégias para se destacar no mercado tech.
🌟 Tendências tech
As novidades mais relevantes em desenvolvimento web e mobile e bancos de dados.
Já somos mais de 5.000 assinantes! Junte-se à nossa comunidade de profissionais que compartilham conhecimento e crescem juntos no universo tech.