Lição 7
Erros comuns de SQL
Evite cross joins acidentais, armadilhas de null, janelas de tempo erradas e suposições inseguras.
Erros de SQL costumam parecer pequenos no texto e grandes no comportamento em produção. Uma condição de join faltando, um limite de tempo errado ou um NULL inesperado pode mudar relatório, resposta de API ou migração.
Condições de join ausentes ou fracas
Se falta condição de join, o banco pode combinar muito mais linhas do que o pretendido. Mesmo com cláusula ON, confira se usa a chave certa e inclui limites de tenant ou conta quando o schema exige.
Comparações com NULL
NULL não é igual a valores ordinários. Use IS NULL ou IS NOT NULL:
WHERE deleted_at IS NULL
Não espere que deleted_at = NULL se comporte como comparação normal.
Janelas de tempo ambíguas
Filtros de tempo devem deixar claro se as bordas são inclusivas ou exclusivas:
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01'
Isso costuma ser mais seguro do que tentar incluir o último segundo do dia ou do mês.
SELECT * em caminhos de aplicação
SELECT * é útil enquanto explora, mas arriscado em código de aplicação. Pode buscar colunas desnecessárias, esconder dependência da forma do schema e dificultar revisões.
Conclusão
Formate a query, leia cláusula por cláusula e procure suposições pequenas: chaves de join, comportamento de null, faixas de tempo e colunas selecionadas.
O Formatador SQL ajuda a expor essas suposições antes de executar ou revisar a query.