Herramienta de Formato SQL
¿Qué es el Formateo SQL?
El formateador SQL estructura consultas SQL con indentación, saltos de línea y cláusulas claramente visibles. SELECT, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, CTEs y subconsultas se vuelven más fáciles de leer, lo que ayuda en revisiones, depuración, enseñanza y análisis de reportes largos. El formateo también puede facilitar detectar cruces accidentales, condiciones saturadas o paréntesis mal colocados. No cambia la lógica de base de datos, no optimiza planes de ejecución, no garantiza portabilidad entre dialectos ni vuelve seguro SQL dinámico inseguro. En producción deben revisarse parametrización, permisos, índices, transacciones, bloqueos y el plan real en la base objetivo.
Cómo usar
Cómo usar
- Pega o escribe sentencias SQL en el cuadro de entrada izquierdo
- Selecciona el tamaño de sangría (2 espacios, 4 espacios o Tab) y el estilo de mayúsculas de las palabras clave
- Haz clic en 'Formatear' para embellecer el SQL o en 'Minificar' para eliminar los espacios en blanco
- Los resultados aparecen a la derecha con resaltado de sintaxis
- Haz clic en 'Copiar' o 'Descargar' para guardar los resultados
Notas sobre revisión de SQL
- El formateo mejora la legibilidad, pero no valida permisos, índices, planes de ejecución ni la corrección de la lógica de negocio.
- Antes de ejecutar SQL modificado, revisa manualmente las cláusulas generadas, los literales de cadena, los comentarios y la sintaxis específica de la base de datos.
Casos de uso
Principio técnico
La fase de impresión aplica una regla por cláusula: SELECT / FROM / WHERE / GROUP BY / HAVING / ORDER BY / LIMIT cada una comienza una nueva línea en la columna cero, las columnas proyectadas y las condiciones ON se indentan un nivel (2 espacios, 4 espacios o tabulación), las palabras clave JOIN (INNER / LEFT / RIGHT / FULL / CROSS) se alinean bajo FROM, CASE / WHEN / THEN / ELSE / END se apilan verticalmente y las subconsultas entre paréntesis y los CTE anidados dentro de WITH reciben un nivel adicional de sangría para que el SELECT exterior permanezca visualmente anclado. Los literales de cadena, los comentarios de línea (-- ...), los comentarios de bloque (/* ... */) y los bloques delimitados por dólar se tokenizan una vez y se copian sin cambios para que el espaciado interno nunca se modifique.
El ajuste de mayúsculas de las palabras clave se aplica en el momento de impresión, no mediante una expresión regular ciega sobre el origen; solo los tokens clasificados como RESERVED_KEYWORD se convierten a mayúsculas o minúsculas, por lo que un identificador llamado 'order' o 'user' dentro de backticks conserva su caso original. El soporte de dialectos es importante porque la lista de palabras reservadas difiere según el motor: PostgreSQL reconoce DISTINCT ON, RETURNING, ILIKE; MySQL añade IFNULL, LIMIT n,m, ENGINE=; SQL Server usa TOP n, OUTPUT, identificadores entre corchetes; Oracle añade DUAL, ROWNUM, MINUS en lugar de EXCEPT; BigQuery y Snowflake amplían el estándar con QUALIFY, EXCEPT (columnas) y literales de array/struct. El rendimiento es lineal respecto a la longitud del origen (O(n) tokens, O(n) bytes de salida), por lo que incluso scripts de migración de varios megabytes se formatean en milisegundos.
- Tokenizador: escanea el origen en las clases RESERVED_KEYWORD, IDENTIFIER, STRING_LITERAL, NUMBER, OPERATOR, LINE_COMMENT (-- ...), BLOCK_COMMENT (/* ... */) y WHITESPACE; los comentarios y cadenas se preservan textualmente
- Conciencia de dialecto: cadenas entre comillas simples (ANSI), identificadores con backtick (MySQL), identificadores entre corchetes (SQL Server), identificadores entre comillas dobles (PostgreSQL/estándar), bloques delimitados por dólar $$...$$ (PostgreSQL)
- Distribución de cláusulas: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT cada una se ancla en la columna 0; las columnas proyectadas y las condiciones ON se indentan un nivel; las palabras clave JOIN se alinean bajo FROM
- Sangría de CTE y subconsultas: las cláusulas WITH indentan el SELECT interior un nivel adicional; las subconsultas correlacionadas dentro de contextos EXISTS / IN / escalar reciben su propia sangría para que la consulta exterior permanezca anclada
- Política de mayúsculas: se aplica en el momento de impresión por clase de token; solo los tokens RESERVED_KEYWORD se convierten a mayúsculas/minúsculas, por lo que identificadores como `order` o [user] conservan su caso original
- Parámetros de enlace: marcadores de posición con signo de interrogación (sentencias preparadas de MySQL), enlaces numerados dólar-1/dólar-2 (PostgreSQL) y enlaces con nombre de dos puntos (Oracle/SQL*Plus) se tokenizan como PARAMETER y nunca se reformatean como identificadores
- Complejidad: análisis léxico O(n) e impresión O(n) donde n = longitud del origen; scripts de migración de varios megabytes se formatean en milisegundos; comparable a la biblioteca npm sql-formatter, pgFormatter y el plugin Prettier SQL
Ejemplos
Formatear un SELECT denso con JOIN y WHERE
Entrada: select u.id,u.name,o.total from users u left join orders o on o.user_id=u.id where u.status='active' and o.created_at>='2026-01-01' order by o.total desc limit 10;
Salida:
SELECT u.id, u.name, o.total
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.status = 'active'
AND o.created_at >= '2026-01-01'
ORDER BY o.total DESC
LIMIT 10;Minificar SQL formateado para una cadena de configuración
Entrada (formateado, 6 líneas):
SELECT id, name
FROM products
WHERE price < 100
AND stock > 0
ORDER BY name;
Salida minificada (1 línea, 78 caracteres):
SELECT id,name FROM products WHERE price<100 AND stock>0 ORDER BY name;Formato de WITH (CTE) + subconsulta anidada
WITH recent_orders AS (
SELECT user_id, SUM(total) AS spend
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY user_id
)
SELECT u.name, r.spend
FROM users u
JOIN recent_orders r ON r.user_id = u.id
WHERE r.spend > (SELECT AVG(spend) FROM recent_orders);Palabras clave en minúsculas (estilo de equipo)
Configuración: Sangría = 2 espacios, Palabras clave = minúsculas
Entrada: SELECT * FROM Users WHERE Status=1;
Salida:
select *
from users
where status = 1;
Uso: coincide con archivos de migración estilo ORM de Ruby on Rails / DjangoPreguntas frecuentes
¿Qué dialectos de SQL admite?
ANSI SQL estándar más palabras clave específicas de los dialectos más comunes: MySQL, PostgreSQL, MSSQL/T-SQL, SQLite, Oracle, BigQuery y Snowflake. Selecciona tu dialecto en el desplegable para que el formateador reconozca las palabras clave propias (LIMIT vs TOP, RETURNING, MERGE, etc.).
¿Qué opciones de estilo hay?
Palabras clave en mayúsculas o minúsculas, tamaño de indentación, comas al inicio o al final en listas de columnas, longitud máxima de línea para el ajuste y si se rompe antes o después de las palabras clave. Estas opciones suelen estar en un panel lateral.
¿Valida el SQL?
La mayoría de formateadores analizan el código de forma flexible y dejan pasar SQL dudoso sin cambios. Una validación real requiere conexión a una base de datos (o al menos un parser SQL real como sqlparse o sqlglot). Usa esto para el formato; usa tu IDE o tu base de datos para comprobar la sintaxis.
¿Formateará procedimientos almacenados y triggers?
La mayoría de versiones gestionan CREATE PROCEDURE / CREATE FUNCTION / triggers hasta donde lo permita el dialecto. Cuerpos largos con flujo de control (IF/ELSE/WHILE) se formatean correctamente; las extensiones del proveedor (palabras clave propias de T-SQL) requieren elegir el dialecto correcto.
¿Se sube mi consulta?
No. El formateo se hace en tu navegador con un parser SQL en JavaScript. El SQL pegado no se transmite. Aun así, nunca pegues credenciales reales de producción ni datos personales en ninguna herramienta web.
¿Por qué mis CTE y JOIN se indentan de forma rara?
Los formateadores no se ponen de acuerdo en la alineación de los CTE. Algunos indentan cada definición de CTE; otros las dejan pegadas a la izquierda. Los JOIN tienen también varios estilos válidos ('JOIN x ON' frente a 'JOIN x\n ON'). Elige la opción que coincida con el estilo de tu equipo y mantenla.
¿Puede minificar SQL?
Algunas versiones ofrecen un modo 'una sola línea' que elimina saltos de línea y espacios extra. Útil para incrustar SQL como cadena literal en código. Mantén siempre la versión formateada en el control de versiones: el SQL en una sola línea es ilegible para revisar.