Como formatar consultas SQL

· 7 min de leitura

SQL desorganizado e uma das maneiras mais rapidas de introduzir bugs. Quando uma consulta e uma unica linha longa sem indentacao, e dificil ver quais condicoes se aplicam a quais junces, onde subconsultas comecam e terminam, ou se a logica esta correta. Um formatador baseado em navegador lida com todo o trabalho localmente sem enviar suas consultas para um servidor.

Por que a formatacao importa

Como formatar SQL

  1. Cole seu SQL: insira uma consulta minificada ou desorganizada no formatador. Ele lida com SELECT, INSERT, UPDATE, DELETE, CREATE TABLE e consultas complexas com subconsultas e junces.
  2. Configure as opcoes: escolha o tamanho da indentacao e se deve colocar palavras-chave em maiusculas. Essas configuracoes correspondem ao guia de estilo do seu projeto.
  3. Copie o resultado: o SQL formatado esta pronto para colar de volta no seu editor, cliente de banco de dados ou documentacao.

Como e uma boa formatacao

Uma consulta como select u.name, o.total from users u join orders o on u.id = o.user_id where o.total > 100 and u.active = 1 order by o.total desc se torna:

SELECT
  u.name,
  o.total
FROM users u
JOIN orders o
  ON u.id = o.user_id
WHERE o.total > 100
  AND u.active = 1
ORDER BY o.total DESC

Cada clausula comeca em sua propria linha. As condicoes sao indentadas sob sua clausula pai. As junces e suas condicoes ON estao claramente emparelhadas.

Uma breve historia das convencoes de formatacao SQL

SQL foi criado pelos pesquisadores da IBM Donald Chamberlin e Raymond Boyce em 1974, originalmente chamado SEQUEL (Structured English Query Language). O «QL» no nome original refletia a intencao de que a linguagem se lesse como ingles. Desde o inicio, esse design legivel por humanos implicou uma convencao: indente suas clausulas para que se leiam de cima para baixo como frases.

Durante a maior parte dos anos 1980 e 1990, SQL era escrito a mao em editores de texto e a formatacao era pessoal. Algumas oficinas adotaram «estilo rio» (onde cada palavra-chave se alinha verticalmente a direita de uma coluna virtual), outros usaram «estilo egipcio» (chave-na-mesma-linha equivalente), e a maioria apenas usava o que o autor preferia.

O primeiro formatador SQL amplamente usado foi o Apex SQL Formatter (2000), seguido pelo SQL Complete da Devart (2002) e SQL Prompt da Red Gate (2003). Essas ferramentas trouxeram formatacao em nivel de IDE para desenvolvedores SQL Server e Oracle. Em 2010, todo IDE principal (SSMS, DataGrip, DBeaver) tinha formatacao SQL integrada, e formatadores online se tornaram padrao para limpeza ad hoc.

Em 2017, o ecossistema de formatadores mudou com o sql-formatter (npm), uma biblioteca JavaScript de codigo aberto que alimenta a maioria dos formatadores SQL baseados em navegador hoje, incluindo este. Formatadores modernos lidam com diferencas de dialeto (backticks do MySQL, funcoes de janela do PostgreSQL, colchetes do SQL Server) e produzem saida consistente e configuravel.

Guias de estilo SQL usados por grandes empresas

A maioria das bases de codigo profissionais segue um dos varios guias de estilo SQL publicados:

Guia de EstiloOrigemConvencoes-chave
Mozilla SQL StyleMozillaPalavras-chave MAIUSCULAS, nomes snake_case, indentacao 2 espacos
GitLab SQL StyleGitLab Data TeamPalavras-chave MAIUSCULAS, nomes minusculos, indentacao 4 espacos, virgulas iniciais
Holistics SQL StyleHolisticsPalavras-chave MAIUSCULAS, snake_case, 2 espacos, virgulas finais
Simon Holywell SQLPessoal/popularAlinhamento «rio», palavras-chave maiusculas
dbt SQL Styledbt LabsPalavras-chave minusculas (dialeto moderno), snake_case, virgulas iniciais
PostgreSQL Wiki StyleComunidade PostgreSQLPalavras-chave minusculas, snake_case, indentacao estilo K&R

Se voce esta comecando um novo projeto, escolha um dos guias estabelecidos. Se voce esta entrando em uma base de codigo existente, siga o que ja esta la. Consistencia dentro de um projeto importa mais do que qualquer estilo especifico.

Escolhas comuns de formatacao

Diferencas de dialeto

Os formatadores SQL precisam lidar com sintaxe especifica do dialeto:

DialetoCaracteristicas distintivas
PostgreSQLFuncoes de janela, LATERAL JOINS, strings entre dolares ($$), estilo intensivo em CTE
MySQL/MariaDBIdentificadores backtick, sintaxe da clausula LIMIT, REPLACE INTO
SQL Server (T-SQL)Identificadores entre colchetes, clausula TOP, clausula OUTPUT, MERGE
Oracle (PL/SQL)Tabela DUAL, ROWNUM, CONNECT BY hierarquico, chamadas de pacote com sufixo de ponto
SQLiteSistema de tipos limitado, REPLACE/UPSERT, banco de dados de arquivo unico
SnowflakeTipos de dados variantes, clausula QUALIFY, COPY INTO
BigQueryIdentificadores backtick, tipos ARRAY/STRUCT, listas de colunas EXCEPT/REPLACE
RedshiftDerivado do PostgreSQL mas DDL distintivo, COPY de S3

Um bom formatador detecta ou aceita uma dica de dialeto, depois lida com sintaxe que outros dialetos rejeitariam.

Armadilhas comuns

Dicas

Privacidade e consultas confidenciais

O formatador SQL roda inteiramente no seu navegador. As consultas que voce cola, o processamento intermediario e a saida formatada ficam todos no seu dispositivo. Nada e enviado para um servidor, registrado ou compartilhado com ninguem.

Isso importa porque consultas SQL frequentemente contem informacoes extremamente sensiveis: nomes de tabelas que revelam a arquitetura do produto, nomes de colunas que expoem a logica de negocios e metricas, IDs de clientes reais em clausulas WHERE, endpoints de API internos em procedimentos armazenados, SSNs e numeros de cartao de credito em dados de teste, compensacao de funcionarios em consultas de RH, numeros financeiros em consultas analiticas, enderecos de e-mail de clientes em consultas de marketing. Formatadores SQL em nuvem registram cada consulta em seus logs de requisicao, as vezes os retem para «melhoria do servico», e estiveram envolvidos em violacoes reais onde consultas de producao coladas vazaram esquemas e dados sensiveis. Um formatador baseado em navegador tem exposicao zero: a consulta nunca sai da sua maquina.

A formatacao baseada em navegador tambem funciona offline depois que a pagina e carregada, util para formatar consultas em avioes, em ambientes seguros sem acesso a internet, ou em qualquer lugar onde voce nao pode ou nao deveria colar uma consulta de banco de dados em um servico de terceiros.

Perguntas frequentes

Palavras-chave SQL devem estar em maiúsculas?

É uma convenção amplamente seguida escrever palavras-chave SQL em maiúsculas (SELECT, FROM, WHERE) e nomes de tabelas ou colunas em minúsculas. Isso torna as consultas mais fáceis de escanear visualmente. A maioria dos guias de estilo recomenda, mas não é exigido por nenhum mecanismo de banco de dados.

A formatação muda como a consulta é executada?

Não. Espaços em branco e indentação não têm efeito na execução do SQL. A formatação é puramente para legibilidade humana. Uma consulta minificada e uma lindamente indentada produzem o mesmo resultado.

Qual tamanho de indentação devo usar?

Dois ou quatro espaços são ambos comuns. Escolha o que sua equipe usa e mantenha consistência. A maioria dos formatadores SQL permite configurar isso.

Meu SQL é enviado a um servidor?

Não. A formatação acontece inteiramente no seu navegador. Suas consultas nunca saem do seu dispositivo.