Pular para o conteúdo principal

Operador SQL NOT IN: Um guia abrangente para iniciantes

Domine o operador NOT IN do SQL com este guia para iniciantes. Aprenda a filtrar dados de forma eficaz, evitar armadilhas comuns e explorar alternativas eficientes
Actualizado 15 de jan. de 2025  · 5 min de leitura

No âmbito da análise e do gerenciamento de dados, a SQL (Structured Query Language, Linguagem de Consulta Estruturada) é uma ferramenta essencial para acessar e manipular sistemas de banco de dados. Entre suas muitas funções, o operador NOT IN serve como um meio eficiente de filtrar conjuntos de dados, permitindo que os usuários excluam linhas que correspondam a uma lista especificada de valores. Este tutorial foi criado com o objetivo de desmistificar o operador NOT IN para iniciantes e profissionais de dados, garantindo clareza em sua aplicação e compreendendo suas possíveis armadilhas.

Por que você não entra?

A escolha de focar no operador NOT IN decorre de sua utilidade em cenários de exclusão de dados. Se você estiver limpando dados, preparando relatórios ou conduzindo análises complexas, entender como excluir efetivamente pontos de dados específicos é inestimável. Esse operador oferece uma sintaxe simples, mas tem nuances que podem afetar o desempenho e a precisão.

Nossa decisão de explorar o site NOT IN em profundidade é para fornecer um entendimento abrangente que equipará você com o conhecimento para usá-lo de forma eficaz em suas consultas SQL.

Entendendo o SQL NOT IN

Noções básicas de NOT IN

O operador NOT IN é usado em uma cláusula WHERE para excluir linhas em que o valor de uma coluna especificada corresponda a qualquer valor em uma determinada lista de valores. Sua sintaxe básica é a seguinte:

SELECT column_names
FROM table_name
WHERE column_name NOT IN (value1, value2, ...);

Essa sintaxe destaca a função do operador na filtragem de dados - uma etapa crítica na análise de dados e no gerenciamento de bancos de dados.

Aplicações práticas do NOT IN

Considere um banco de dados que contém uma tabela de informações de clientes. Se você deseja selecionar clientes que não são de cidades específicas, o site NOT IN se torna uma ferramenta inestimável, permitindo que você exclua facilmente essas cidades do conjunto de resultados.

Exemplos passo a passo de NOT IN

Exemplo 1: Exclusão de valores específicos

Digamos que você tenha uma tabela chamada Customers com colunas CustomerID, CustomerName e City. Para encontrar clientes que não estejam localizados em "Nova York" ou "Los Angeles", a consulta seria:

CustomerlD

CustomerName

Cidade

1

John Doe

Nova York

2

Jane Smith

Los Angeles

3

Emily Jones

Chicago

4

Chris Brown

Miami

5

Alex Johnson

São Francisco

6

Jessica White

Nova York

Tabela de clientes

SELECT CustomerName, City
FROM Customers
WHERE City NOT IN ('New York', 'Los Angeles');

CustomerName

Cidade

Emily Jones

Chicago

Chris Brown

Miami

Alex Johnson

São Francisco

Exemplo 2: Usando NOT IN com subconsultas

NOT IN também pode trabalhar com subconsultas. Por exemplo, para localizar produtos que não foram pedidos:

ID do produto

Nome do produto

1

Apple

2

Banana

3

Laranja

4

Pera

5

Uva

Produtos de mesa

OrderID

ID do produto

101

2

102

4

103

2

104

3

Tabela de pedidos

SELECT ProductName
FROM Products
WHERE ProductID NOT IN (
  SELECT ProductID
  FROM Orders
);

Nome do produto

Apple

Uva

Armadilhas comuns e como evitá-las

Manipulação de valores NULL

Um problema comum com NOT IN surge quando a lista de valores contém NULL. Como NULL representa um valor desconhecido, qualquer comparação com NULL usando NOT IN não retornará nenhuma linha, mesmo que haja linhas que devam ser logicamente excluídas da lista.

Para contornar isso, certifique-se de que a lista de valores não contenha NULL ou use uma abordagem alternativa, como NOT EXISTS.

Exemplo:

Suponha que tenhamos uma tabela Orders (Pedidos) com uma coluna CustomerID, algumas das quais são NULL para representar pedidos de convidados. Se você executar uma consulta para encontrar pedidos não feitos por determinados clientes, incluir NULL na lista faria com que nenhum resultado fosse retornado.

OrderID

CustomerID

101

3

102

4

103

2

104

 

106

1

Tabela de pedidos

-- Assume we want to exclude CustomerID 1, 2, and unknown (NULL) customers
SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2, NULL);

Essa consulta não retornaria nenhuma linha, o que provavelmente não é o resultado desejado.

Solução: Para garantir resultados precisos, evite incluir NULL na lista para NOT IN. Como alternativa, use uma combinação de NOT IN para valores conhecidos e IS NOT NULL para lidar com NULLs de forma eficaz.

SELECT OrderID
FROM Orders
WHERE CustomerID NOT IN (1, 2) AND CustomerID IS NOT NULL;

OrderID

101

102

Considerações sobre o desempenho

Para grandes conjuntos de dados ou subconsultas, o site NOT IN pode ser menos eficiente do que alternativas como NOT EXISTS ou LEFT JOIN /IS NULL. A ineficiência decorre da forma como o NOT IN compara cada linha da tabela com cada valor da lista, o que pode levar a um desempenho lento em grandes conjuntos de dados.

Alternativas ao SQL NOT IN

Usando NOT EXISTS

NOT EXISTS é frequentemente recomendado em vez de NOT IN ao lidar com subconsultas que podem retornar valores NULL. Em geral, ele é mais eficiente porque é interrompido assim que encontra uma correspondência.

Exemplo:

Para localizar produtos que não foram pedidos, você deve usar NOT EXISTS:

SELECT ProductName
FROM Products p
WHERE NOT EXISTS (
  SELECT 1
  FROM Orders o
  WHERE o.ProductID = p.ProductID
);

Nome do produto

Apple

Uva

Essa consulta verifica a não existência de um produto na tabela de pedidos, o que pode ser mais eficiente do que a comparação com uma lista potencialmente grande de IDs com NOT IN.

UNIÃO ESQUERDA / É NULO

Outra alternativa eficiente para excluir linhas é usar uma cláusula LEFT JOIN combinada com uma cláusula WHERE... IS NULL. Esse método é particularmente eficaz para grandes conjuntos de dados.

Exemplo:

Para atingir o mesmo objetivo de encontrar produtos que não foram pedidos:

SELECT p.ProductName
FROM Products p
LEFT JOIN Orders o ON p.ProductID = o.ProductID
WHERE o.ProductID IS NULL;

Nome do produto

Apple

Uva

Esse método aproveita o site LEFT JOIN para incluir todos os produtos e quaisquer pedidos correspondentes e, em seguida, filtra os produtos que têm pedidos usando WHERE o.ProductID IS NULL, excluindo-os efetivamente.

Práticas recomendadas para usar o NOT IN

  • Verifique a lista para NULL valores: Certifique-se de que a lista usada em NOT IN não contenha valores NULL para evitar resultados inesperados.
  • Considere o tamanho do conjunto de dados: Para grandes conjuntos de dados ou subconsultas, avalie se alternativas como NOT EXISTS podem oferecer melhor desempenho.
  • Indexação: Certifique-se de que as colunas usadas na cláusula NOT IN sejam indexadas, se possível, para melhorar o desempenho da consulta.

Usando NOT IN no projeto de dados da vida real

Na análise de dados, o comando SQL "Not IN" é comumente usado para recuperar dados específicos. Nesta seção, trabalharemos com um banco de dados de uma livraria que controla o estoque (livros disponíveis na loja) e as vendas (livros vendidos). Nosso objetivo é identificar quais livros nunca foram vendidos.

Temos duas mesas:

  • Inventário: para armazenar informações sobre livros na livraria.
  • Vendas: para armazenar registros de livros que foram vendidos.

image4.png

Tabela de inventário

image3.png

Tabela de vendas

Agora, queremos descobrir quais livros nunca foram vendidos.

SELECT Title, Author 
FROM Inventory 
WHERE BookID NOT IN (
    SELECT BookID 
    FROM Sales
);

image1.png

Em seguida, queremos identificar os livros em nosso estoque que não foram vendidos no último mês, supondo que hoje seja 7 de fevereiro de 2024. Isso envolve a verificação da SaleDate na tabela Sales em relação à nossa data atual.

SELECT Title, Author 
FROM Inventory 
WHERE BookID NOT IN (
    SELECT BookID 
    FROM Sales
    WHERE SaleDate >= date('now', '-1 month')
);

image2.png

Conclusão

O operador NOT IN é uma ferramenta versátil no SQL para excluir valores específicos dos resultados da consulta. Ao compreender a sintaxe, as aplicações práticas e as possíveis armadilhas, você poderá usar esse operador com eficiência nas tarefas de manipulação de dados.

Lembre-se de considerar os valores de NULL e o tamanho do conjunto de dados para otimizar o desempenho e a precisão de suas consultas. À medida que você se familiarizar com o NOT IN, verá que ele é um complemento inestimável para o seu kit de ferramentas SQL, permitindo análise e gerenciamento de dados mais precisos e eficientes.

Você pode saber mais sobre NOT IN e NOT EXISTS em nosso curso Melhorando o desempenho da consulta no SQL Server e explorar os operadores SQL e muito mais em nosso curso de habilidades SQL Basics Cheat Sheet e SQL Fundamentals.

Torne-se um engenheiro de dados

Comprove suas habilidades como engenheiro de dados pronto para o trabalho.
Acelerar minha carreira de dados

Abid Ali Awan's photo
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Temas

Comece sua jornada de aprendizado de SQL hoje mesmo!

curso

Intermediate SQL

4 hr
302.5K
Accompanied at every step with hands-on practice queries, this course teaches you everything you need to know to analyze data using your own SQL code today!
Ver DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

Tutorial do MySQL: Um guia abrangente para iniciantes

Descubra o que é o MySQL e como começar a usar um dos sistemas de gerenciamento de banco de dados mais populares.
Javier Canales Luna's photo

Javier Canales Luna

15 min

tutorial

Como usar GROUP BY e HAVING no SQL

Um guia intuitivo para você descobrir os dois comandos SQL mais populares para agregar linhas do seu conjunto de dados
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Tutorial de visão geral do banco de dados SQL

Neste tutorial, você aprenderá sobre bancos de dados em SQL.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

QUALIFICAR: A instrução de filtragem SQL que você nunca soube que precisava

Saiba mais sobre a cláusula SQL QUALIFY, um método de filtragem essencial, porém menos conhecido, no SQL. Entenda sua sintaxe, usos e como ela difere de outros métodos de filtragem SQL.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

tutorial

Tutorial do SQL Server: Desbloqueie o poder do gerenciamento de dados

Explore o gerenciamento de dados com nosso tutorial do SQL Server. Do básico ao uso avançado, aprimore suas habilidades e navegue no SQL Server com confiança.

Kevin Babitz

13 min

Ver maisVer mais