Ir para o conteúdo

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.
  • 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.
  • 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.
  • 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')

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."

SELECT 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';
Esta consulta usa AND, NOT e BETWEEN para criar um filtro de segurança poderoso, uma tarefa diária para um analista de segurança na nuvem.