Formatador e Validador de SQL - Formate Consultas SQL Online Gratuitamente
Formatador e validador de SQL gratuito. Formata automaticamente SQL com recuo e capitalização adequados. Verifique erros de sintaxe instantaneamente. Funciona com MySQL, PostgreSQL, SQL Server, Oracle.
Formatador e Validador de SQL
Formate e valide consultas SQL com recuo automático, capitalização de palavras-chave e detecção de erros de sintaxe.
Documentação
O que é um formatador e validador de SQL?
Um formatador de SQL é uma ferramenta que reescreve uma consulta SQL com espaçamento consistente, quebras de linha e palavras-chave em maiúsculas, para facilitar a leitura. Um validador de SQL verifica se essa mesma consulta contém erros estruturais, como uma aspa não fechada ou um parêntese ausente, sem se conectar a um banco de dados. Esta ferramenta faz as duas coisas. Ela é executada inteiramente no navegador, portanto o texto da consulta nunca é enviado a um servidor.
Como formatar uma consulta SQL
- Cole ou digite uma consulta SQL na caixa de entrada.
- A versão formatada aparece automaticamente à direita, sem a necessidade de pressionar um botão.
- Os erros de validação aparecem em uma lista abaixo da saída.
- Um botão de cópia envia a consulta formatada para a área de transferência.
Regras de formatação de SQL
Capitalização de palavras-chave
O formatador converte em maiúsculas uma lista fixa de palavras-chave do SQL sempre que elas aparecem fora de uma string ou de um identificador entre aspas. No SQL, as palavras-chave não diferenciam maiúsculas de minúsculas, de modo que isso muda a aparência da consulta, mas não o que ela faz. A lista abrange as cláusulas principais (SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT, OFFSET), as palavras de junção (JOIN, LEFT, RIGHT, INNER, OUTER, FULL, ON), os tipos de instrução (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP) e operadores e conectores comuns (AND, OR, NOT, IN, BETWEEN, LIKE, AS, CASE, WHEN, THEN, ELSE, END, UNION, DISTINCT, VALUES, SET e mais algumas).
Algumas palavras que parecem palavras-chave são mantidas como foram digitadas. As funções de agregação, como COUNT, SUM e AVG, não estão na lista, então count(*) continua em minúsculas se foi digitado assim. As palavras de direção de ordenação ASC e DESC, e os literais TRUE, FALSE e NULL isolados, também ficam intactos. O texto dentro de um literal de string ('...'), de um identificador entre aspas ("...", as aspas invertidas do MySQL `...`, ou os colchetes do SQL Server [...]) ou de um comentário nunca é alterado, seja qual for o conteúdo.
Quebras de linha e indentação
Cada cláusula principal começa em uma nova linha, na margem esquerda: SELECT, FROM, WHERE, GROUP BY, ORDER BY, HAVING, LIMIT e OFFSET. JOIN (e suas variantes, como LEFT JOIN) também começa em uma nova linha. CASE, WHEN, THEN, ELSE e END iniciam, cada um, uma nova linha, e UNION (ou UNION ALL, mantidos juntos em uma só linha) é separado por linhas em branco. Cada vírgula também inicia uma nova linha, então uma lista de colunas em SELECT ou GROUP BY termina com uma coluna por linha.
O recuo só aparece dentro de parênteses. O conteúdo de uma subconsulta ou de uma expressão agrupada é recuado em dois espaços para cada nível de aninhamento. Uma consulta sem parênteses é formatada com todas as cláusulas rente à margem esquerda, sem nenhum recuo.
Exemplo: antes e depois da formatação
Antes:
1select id, first_name, last_name, email from customers where status = 'active' order by last_name, first_name;
2Depois:
1SELECT id,
2first_name,
3last_name,
4email
5FROM customers
6WHERE status = 'active'
7ORDER BY last_name,
8first_name;
9Todas as palavras-chave ficam em maiúsculas, e cada cláusula e coluna fica em sua própria linha. Como a consulta não tem parênteses, nenhuma linha é indentada.
Os parênteses alteram esse comportamento. Ao formatar (select count(*) from employees e where e.department_id = d.id) como parte de uma consulta maior, SELECT, FROM e WHERE internos recebem dois espaços de indentação, enquanto count permanece em minúsculas por ser um nome de função, não uma palavra-chave da lista.
O que o validador de SQL verifica
O validador procura problemas estruturais sem se conectar a um banco de dados:
- Aspas não fechadas. Uma aspa simples ou dupla que é aberta, mas nunca fechada.
- Parênteses desbalanceados. A quantidade de
(e)fora de cadeias de caracteres e comentários deve ser igual. - Subconsultas sem parênteses. Um
SELECTaninhado dentro de outro padrãoSELECT ... FROM ... SELECTque não está envolvido por( ). WHEREcomeçando comANDouOR. Um conector no início, sem nada antes dele.JOINsem uma condição correspondente. UmJOINprecisa de uma cláusulaONouUSING.CROSS JOINeNATURAL JOINsão exceções, pois não usam uma dessas cláusulas.GROUP BYouORDER BYvazio. A palavra-chave da cláusula sem colunas depois dela, no final da consulta.- Uma condição
WHEREincompleta. Uma comparação sem valor, comoWHERE status =, ou umWHEREisolado sem nada depois dele, no final da consulta. - Um
SELECTsemFROM. Sinalizado apenas quando a lista de seleção contém só nomes de colunas simples; uma expressão, uma chamada de função ou um literal depois deSELECTé válido por si só e não é sinalizado. - Ordem das cláusulas. São feitas duas verificações específicas:
GROUP BYnão pode vir antes deWHERE, eORDER BYnão pode vir antes deGROUP BY. Essas verificações são feitas no nível superior da consulta, ignorando o que estiver dentro de uma subconsulta.
O que ele não verifica
O validador não sabe se as tabelas ou colunas realmente existem, se as colunas unidas têm tipos compatíveis ou qual será o desempenho de uma consulta. Ele também não sinaliza todas as regras que um banco de dados real aplica. Dois exemplos: HAVING usado sem GROUP BY é aceito, porque a presença de HAVING transforma a consulta em uma consulta agrupada mesmo sem GROUP BY, e por isso o validador não gera erro nesse caso. Do mesmo modo, ele não verifica se toda coluna não agregada da lista de SELECT também aparece em GROUP BY. Muitos bancos de dados aplicam essa regra, mas esta ferramenta não a testa. A falta de ponto e vírgula no final também não é sinalizada, já que o ponto e vírgula é um separador de instruções e não faz parte de uma única consulta.
Exemplo: erros detectados pelo validador
1SELECT id FROM orders
2JOIN users
3WHERE status =
4Esta consulta produz dois erros:
- "One or more JOIN statements are missing the ON condition."
JOIN usersnão tem cláusulaONnemUSING. - "WHERE condition is incomplete."
status =não tem valor depois do sinal de igual.
Perguntas frequentes
Esta ferramenta funciona com MySQL, PostgreSQL, SQL Server e Oracle?
Ela lida com a sintaxe SQL básica compartilhada por esses bancos de dados: SELECT, JOIN, WHERE, GROUP BY e cláusulas semelhantes. Sintaxes específicas de um banco de dados, como literais de matriz do PostgreSQL ou blocos procedurais do T-SQL, não interrompem o formatador, mas podem não receber tratamento especial.
A consulta SQL é enviada a um servidor?
Não. A formatação e a validação são executadas no navegador. O texto da consulta não é transmitido para nenhum lugar.
Ele capitaliza nomes de funções como COUNT, SUM e AVG?
Não. Apenas palavras-chave de cláusulas, palavras de junção e uma lista fixa de operadores são convertidas para maiúsculas. Nomes de funções como count, sum e avg, assim como as palavras asc, desc, true, false e null, permanecem exatamente como foram digitados.
O validador sinaliza HAVING usado sem GROUP BY?
Não. Uma cláusula HAVING sem GROUP BY agrupa todo o resultado em um único grupo, o que é SQL válido, então o validador não a trata como erro.
O validador consegue detectar todos os erros de SQL?
Não. Ele verifica a estrutura: parênteses, aspas, algumas regras de ordem das cláusulas e algumas lacunas lógicas comuns, como um JOIN sem condição. Ele não verifica nomes de tabelas ou colunas, tipos de dados nem o desempenho da consulta. Ainda é preciso uma conexão com um banco de dados real para confirmar que a consulta é executada corretamente.
A formatação altera a maneira como uma consulta é executada?
Não. A formatação altera apenas o espaço em branco e a capitalização de palavras-chave sem aspas. Tudo que estiver dentro de uma cadeia de caracteres, de um identificador entre aspas ou de um comentário é copiado sem alterações; portanto, a consulta mantém exatamente o mesmo significado.
Referências
- PostgreSQL Global Development Group. Lexical Structure. postgresql.org — as palavras-chave não diferenciam maiúsculas de minúsculas.
- Oracle. MySQL 8.0 Reference Manual: Schema Object Names. dev.mysql.com — a aspa invertida é o caractere de aspas de identificadores do MySQL.
- Microsoft. Database Identifiers. learn.microsoft.com — os identificadores delimitados do SQL Server usam colchetes ou aspas duplas.
- PostgreSQL Global Development Group. SELECT. postgresql.org — HAVING torna a consulta agrupada mesmo sem GROUP BY.