Readme

Convenções de SQL voltadas a quem vai ler a query depois. Os exemplos usam SQL Server como referência, e as diferenças do PostgreSQL aparecem sinalizadas onde importam.

Uma linha divide este guia: o banco guarda e devolve dados, e a aplicação decide o que os dados significam. As regras de negócio, as validações e a orquestração ficam na aplicação. As procedures e as functions ficam reservadas ao que só o banco faz bem, que é otimizar acesso e montar relatório.

Fundamentos

TópicoConceitos
FormataçãoEstilo vertical, indentação, JOIN, condições verticais
NomesInglês, plural/singular, qualificação, prefixos, constraints
CRUDINSERT, SELECT, UPDATE, DELETE, soft delete, filtros, ordenação
Densidade visualCTEs encadeadas, etapas em procedures

Avançados

TópicoConceitos
Recursos avançadosCTEs, subqueries, functions
ProceduresTemp tables, etapas nomeadas, queries complexas
PerformanceSELECT *, índices, subquery correlacionada, FK sem índice, paginação
Segurança contra nulosIS NULL, COALESCE, NULLIF, NOT NULL + DEFAULT, NULL em JOIN
MigrationsNaming YYYYMMDDHHMMSS, forward only, uma responsabilidade
Operações em loteBatch INSERT, DELETE/UPDATE em lotes com TOP + WHILE, staging table
Modelagem de entidadesDOMAIN type para IDs, embedded columns vs satellite, ENUM/CHECK, FK por id, RLS
Referência rápidaNomenclatura, verbos, taboos, query estruturada

SGBD

Idioms e recursos específicos de cada banco de dados.

SGBDVersãoConceitos
SQL Server2025T-SQL, tipos, procedures, TRY/CATCH, OPPO, RegEx, JSON nativo, vector search
PostgreSQL18PL/pgSQL, RETURNING, JSONB, UUID v7, CTEs em DML, window functions, LISTEN/NOTIFY
SQLite3.53Type affinity, WAL, rowid, FTS5, JSON, ALTER TABLE, PRAGMAs

Princípios

Legibilidade e nomes: formatação, estilo visual e nomenclatura

PrincípioDescrição
Escrita em inglêsTabelas, colunas e objetos nomeados em inglês
Escrita verticalUma cláusula por linha: SELECT, FROM, JOIN, WHERE, ORDER BY
Baixa densidade visualInline somente com ≤3 campos e ≤1 condição
Indentação consistente2 espaços sob cada cláusula, blocos alinhados por nível
Nomes expressivosAliases descritivos pelo domínio; nunca t, c, x
Qualificação explícitaSempre Tabela.Coluna, nunca colunas nuas
Joins legíveisJOIN e ON em linhas separadas; ON complexo expandido
Condições verticaisUma condição por linha, AND e OR ao final da linha
Sem valores mágicosParâmetros nomeados em vez de literais inline
Ordenação explícitaORDER BY sempre declarado
Objetos nomeadosSP_, FN_, IX_, VW_: prefixo declara a intenção
Constraints nomeadasPK_, FK_, UQ_, CK_: toda constraint tem nome explícito

Estrutura: organização de queries complexas

PrincípioDescrição
Fluxo linearLeitura de cima para baixo: filtros antes de JOINs, resultado no final
Etapas explícitasQueries complexas decompostas em passos nomeados com temp tables
Sem subqueries profundasSubqueries substituídas por CTEs nomeadas
CTE vs temp tableCTE para leitura simples; temp table (#) para reuso e performance
Filtros antecipadosWHERE na tabela principal antes dos JOINs

Performance e integridade: otimizações e restrições

PrincípioDescrição
Consultas enxutasSem SELECT *; trazer apenas as colunas necessárias
FK com índiceFK sempre acompanhada de índice na coluna referenciadora
Migrations incrementaisYYYYMMDDHHMMSS_descricao.sql: uma mudança por arquivo
Forward onlyNunca editar migration existente; ajuste = nova migration

DoDocs v3.7.0 · Desenvolvido por @thiagocajadev · Baseado no trabalho de pmndrs/docs · Poimandres.