Diferenças entre os operadores EXISTS e IN no SQL

Escrito por barry kaye | Traduzido por cezar rosa
  • Compartilhar
  • Tweetar
  • Compartilhar
  • Pin
  • E-mail
Diferenças entre os operadores EXISTS e IN no SQL
Considere seus objetivos em SQL ao escolher EXISTS ou IN (Jupiterimages/Photos.com/Getty Images)

Um desafio constante no uso de SQL é a determinação do uso adequado dos operadores EXISTS e IN. Os dois operadores podem produzir os mesmos resultados, mas nem sempre. Além disso, há um debate considerável sobre a forma como cada operador é otimizado para velocidade. Os usuários devem entender os diferentes atributos de cada operador e experimentar os dois para determinar a utilização apropriada.

Outras pessoas estão lendo

Operador IN

O operador IN retorna uma linha se o valor do campo de uma tabela satisfaz a condição WHERE em uma lista de valores IN. Ele é normalmente usado como parte de uma consulta principal ou em conjunto com uma subconsulta.

Exemplo 1: WHERE tabela.campo IN ('a', 'b', 'c') Exemplo 2: WHERE tabela.campo IN (Subconsulta que retorna um conjunto)

Operador EXISTS

O operador EXISTS retorna todas as linhas principais se uma subconsulta contém alguma linha. Ele é usado apenas em conjunto com uma subconsulta. As linhas retornadas são determinadas pelo filtro na consulta principal.

Exemplo: WHERE EXISTS (Subconsulta que retorna um conjunto)

Diferença

O operador IN não pode avaliar valores NULL, portanto tais linhas sempre serão falsas, e não serão retornadas, ao contrário do operador EXISTS, que avalia e retorna linhas com valor NULL.

Similaridades

Ambos EXISTS e IN suportam subconsultas correlacionadas e não correlacionadas, e ambos podem produzir resultados semelhantes. Quando correlacionados, eles satisfazem um campo de consulta principal para um campo de subconsulta (ex: principal.id = subconsulta.id). A subconsulta avalia linha por linha, para cada ocorrência encontrada. Neste caso, IN e EXISTS retornarão as mesmas linhas com base em condições "id" semelhantes. Quando não correlacionados, os dois operadores processam suas subconsultas e então combinam os resultados para a consulta principal.

Performance

O desempenho é determinado pelo otimizador do banco de dados e o plano de execução utilizado para o código executado. Para EXISTS e IN, o otimizador pode escolher caminhos diferentes. No Oracle, o NOT EXISTS normalmente é mais rápido do que o NOT IN. No final, algumas tentativas e erros são necessárias para classificar o caminho mais curto, dependendo da base de dados e a versão que está sendo usada. Certifique-se de usar o operador que garanta os resultados corretos em primeiro lugar, e em seguida tente substituir os operadores para ver qual é o mais rápido.

Não perca

Filtro:
  • Geral
  • Artigos
  • Slides
  • Vídeos
Mostrar:
  • Mais relevantes
  • Mais lidos
  • Mais recentes

Nenhum artigo disponível

Nenhum slide disponível

Nenhum vídeo disponível