🔎 IN e NOT IN no SQL

Introdução

Os operadores IN e NOT IN são utilizados para verificar se um valor pertence ou não a uma lista de valores ou ao resultado de uma subconsulta.

Eles facilitam filtros que precisariam de vários operadores OR.

📌 IN verifica se um valor existe em uma lista. NOT IN verifica se não existe.

Operador IN

O operador IN retorna registros quando o valor informado está dentro da lista definida.


SELECT *

FROM clientes


WHERE cidade IN

('São Paulo',

'Rio de Janeiro',

'Curitiba');
          

Equivalente utilizando OR

O mesmo resultado poderia ser escrito assim:


SELECT *

FROM clientes


WHERE cidade = 'São Paulo'

OR cidade = 'Rio de Janeiro'

OR cidade = 'Curitiba';
          

O IN deixa a consulta mais organizada.

Exemplo de Tabela


CLIENTES

+----+----------+-------------+

| ID | Nome     | Cidade      |

+----+----------+-------------+

| 1  | Ana      | São Paulo   |

| 2  | Carlos   | Curitiba    |

| 3  | Pedro    | Salvador    |

| 4  | Maria    | Rio Janeiro |

+----+----------+-------------+
          

Utilizando IN


SELECT nome

FROM clientes


WHERE cidade IN

('São Paulo',

'Curitiba');
          

Resultado:


Ana

Carlos
          

IN com Subconsulta

O IN também pode receber o resultado de outra consulta.


SELECT nome

FROM clientes


WHERE id IN

(
    SELECT cliente_id

    FROM pedidos
);
          

Retorna clientes que possuem pedidos cadastrados.

Operador NOT IN

O NOT IN retorna registros que não pertencem à lista informada.


SELECT *

FROM clientes


WHERE cidade NOT IN

('São Paulo',

'Curitiba');
          

Resultado NOT IN


Pedro

Maria
          

NOT IN com Subconsulta


SELECT nome

FROM clientes


WHERE id NOT IN

(
    SELECT cliente_id

    FROM pedidos
);
          

Retorna clientes que nunca realizaram pedidos.

IN x NOT IN

IN NOT IN
Busca valores existentes Busca valores ausentes
Equivale a vários OR Equivale a exclusões
Inclui registros selecionados Remove registros selecionados

Cuidados com NULL

O NOT IN pode apresentar resultados inesperados quando a subconsulta retorna valores NULL.


SELECT nome

FROM clientes


WHERE id NOT IN

(
    SELECT cliente_id

    FROM pedidos
);
          

Caso cliente_id possua NULL, o resultado pode não ser o esperado.

IN x EXISTS

IN EXISTS
Compara valores Verifica existência
Retorna uma lista Retorna verdadeiro ou falso
Útil para pequenos conjuntos Melhor em grandes volumes

Aplicações no Mundo Real

Sistema Exemplo
E-commerce Produtos de determinadas categorias
RH Funcionários de setores específicos
Financeiro Transações selecionadas
Relatórios Filtros avançados

Erros Comuns

Erro Problema
Usar NOT IN com NULL Resultado incorreto
Lista muito grande Baixo desempenho
Comparar tipos diferentes Erro na consulta
Subconsulta sem índice Consulta lenta

Boas Práticas

Resumo da Aula

🎓 Aula concluída! Agora você sabe utilizar IN e NOT IN para criar filtros eficientes em consultas SQL.