Curso
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 emNOT 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.
Tabela de inventário
Tabela de vendas
Agora, queremos descobrir quais livros nunca foram vendidos.
SELECT Title, Author
FROM Inventory
WHERE BookID NOT IN (
SELECT BookID
FROM Sales
);
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')
);
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

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.