← SQL: perguntas melhores aos dados
01 / 11 · 22 MIN

Consultar com intenção

Seleciona colunas, filtra linhas e define uma ordem explícita.

Cada cláusula tem uma função

SELECT define as expressões devolvidas. FROM identifica a origem dos dados. WHERE filtra linhas. ORDER BY estabelece uma ordenação. Sem ORDER BY, não deves depender da ordem observada num resultado anterior. Escolhe apenas as colunas necessárias para tornar o contrato claro.

Tratar ausência

NULL representa ausência ou desconhecimento conforme o modelo. Para testar esse estado, usa IS NULL ou IS NOT NULL, não = NULL. As condições de WHERE só mantêm linhas quando o resultado é verdadeiro; um resultado desconhecido não passa o filtro.

Aplicação guiada no trabalho

Num painel de incidentes, escreve primeiro o contrato: uma linha por incidente, apenas incidentes abertos e ordem por data de criação com desempate por ID. Usa resolved_at IS NULL segundo a convenção do modelo e seleciona as colunas necessárias. A ausência não é uma data fictícia e não deve ser comparada com = NULL. Quando uma lista de exclusão pode conter NULL, experimenta mentalmente três casos: ID que corresponde, ID diferente e ID desconhecido. NOT IN pode produzir desconhecido em vez de verdadeiro. Se a regra é excluir apenas correspondências e o ID exterior é obrigatório, NOT EXISTS correlacionado exprime essa intenção. Testa também empates de data. Uma ordem total evita empates arbitrários, mas não congela dados alterados entre páginas.

SELECT id, title
FROM incidents
WHERE resolved_at IS NULL
ORDER BY created_at, id;
NA PRÁTICA

Um painel mostra incidentes abertos. Uma ordenação por data e ID dá um critério explícito para incidentes com a mesma data, evitando paginação instável por empates.

Armadilhas comuns

Confiar na ordem observada; usar = NULL; ignorar NULL em NOT IN.

Tópicos relacionados: Juntar sem multiplicar enganos · Contar e agrupar com cuidado

Leva esta ideia contigo

A ordem tem de ser pedida; NULL exige condições próprias.

Criar conta

Referência: PostgreSQL 18: Comparison functions and operators · PostgreSQL 18 reference semantics; DR SQL 2026.4; synthetic plan metrics and portable SQLite 3.51.2 examples