A Lógica do Filtro: Guia de Operadores Avançados em SQL
Já sabemos como usar o WHERE
para filtros simples (preco > 100
). Mas como fazemos perguntas mais complexas, como "Quais clientes de São Paulo OU do Rio de Janeiro fizeram uma compra nos últimos 30 dias?".
Para isso, usamos os Operadores Lógicos e de Comparação. Eles são os "conectivos" que nos permitem construir condições de filtro ricas e precisas no nosso "formulário de requisição".
1. Os Conectivos Lógicos (AND
, OR
, NOT
)
Estes são os três blocos de construção de toda a lógica.
-
AND
(O Exigente):- O que faz? Retorna
TRUE
apenas se TODAS as condições forem verdadeiras. - Analogia: "Eu quero livros do autor 'Asimov' E que foram publicados antes de 1960." O bibliotecário só trará livros que satisfaçam as duas regras.
- O que faz? Retorna
-
OR
(O Flexível):- O que faz? Retorna
TRUE
se PELO MENOS UMA das condições for verdadeira. - Analogia: "Eu quero livros do autor 'Asimov' OU do autor 'Clarke'." O bibliotecário trará livros de ambos.
- O que faz? Retorna
-
NOT
(O Inversor):- O que faz? Nega uma condição.
- Analogia: "Eu quero todos os livros do 'Asimov', EXCETO a série 'Fundação'."
- Exemplo:
WHERE autor = 'Asimov' AND NOT serie = 'Fundação'
2. Os Atalhos Elegantes (BETWEEN
, IN
)
Estes operadores tornam suas consultas mais limpas e legíveis.
-
BETWEEN
(O Atalho de Intervalo):- A Dor que Resolve: Escrever
WHERE preco >= 10 AND preco <= 20
é repetitivo. - Como Usar:
WHERE preco BETWEEN 10 AND 20
Insight: O
BETWEEN
é inclusivo, ou seja, inclui os valores inicial e final.
- A Dor que Resolve: Escrever
-
IN
(O Atalho de Lista):- A Dor que Resolve: Escrever
WHERE estado = 'SP' OR estado = 'RJ' OR estado = 'MG'
é muito longo. - Como Usar:
WHERE estado IN ('SP', 'RJ', 'MG')
- A Dor que Resolve: Escrever
3. A Gramática da Lógica (Precedência e Parênteses)
Esta é a parte mais importante e que mais confunde iniciantes. O SQL, por padrão, tem uma ordem de "leitura".
A Regra Padrão: O operador AND
é processado ANTES do operador OR
.
- O Problema (Ambiguidade): Você quer um relatório de "todos os clientes de São Paulo ou do Rio de Janeiro que sejam do segmento VIP".
- A Consulta Errada:
SELECT nome FROM clientes WHERE cidade = 'São Paulo' OR cidade = 'Rio de Janeiro' AND segmento = 'VIP';
- Como o Banco de Dados Pensa: Ele primeiro resolve o
AND
. A pergunta que ele entende é: "Me traga (todos os clientes do Rio de Janeiro que são VIP) OU (todos os clientes de São Paulo, não importa o segmento)". Este não é o resultado que você queria!
A Solução: ()
(Assuma o Controle)
- Analogia: Use parênteses para "agrupar suas ideias no formulário" e remover qualquer ambiguidade para o bibliotecário.
- A Consulta Correta:
SELECT nome FROM clientes WHERE (cidade = 'São Paulo' OR cidade = 'Rio de Janeiro') AND segmento = 'VIP';
- Como o Banco de Dados Pensa Agora: Ele primeiro resolve o que está dentro dos parênteses: "(me dê todos os clientes de SP ou RJ)". Depois, ele aplica o filtro final: "dessa lista, me traga apenas os que são VIP". Agora sim!
O Contexto AWS
HACK PARA CERTIFICAÇÃO (E VIDA REAL):
Estes operadores são a base da análise de dados. No dia a dia da AWS, você os usará constantemente no Amazon Athena para investigar logs do CloudTrail.
Cenário Prático: "Investigue todos os logins no console (
ConsoleLogin
) que não vieram do IP do nosso escritório (189.45.1.0/24
) e que aconteceram durante o mês de setembro."Esta consulta usaSELECT eventTime, sourceIPAddress, userIdentity.arn FROM minha_tabela_de_logs WHERE eventName = 'ConsoleLogin' AND NOT (sourceIPAddress LIKE '189.45.1.%') AND eventTime BETWEEN '2025-09-01' AND '2025-09-30';
AND
,NOT
eBETWEEN
para criar um filtro de segurança poderoso, uma tarefa diária para um analista de segurança na nuvem.