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
TRUEapenas 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
TRUEse 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,NOTeBETWEENpara criar um filtro de segurança poderoso, uma tarefa diária para um analista de segurança na nuvem.