Cómo funciona el formateo SQL
El formateo SQL es una reescritura basada en un lexer que recorre cada token de la consulta y lo vuelve a emitir con el espacio en blanco adecuado según las reglas del dialecto elegido. La semántica de la consulta nunca cambia, solo el diseño.
- Elige un dialecto. Las comillas invertidas de MySQL, los casts
::de PostgreSQL, las rutas de tabla con puntos de BigQuery y los identificadores entre corchetes de T-SQL necesitan cada uno un tokenizador que los conozca. El selector de dialecto elige qué gramática aplicar. - Tokeniza la entrada. El formateador divide la consulta en un flujo de tokens: palabras clave (
SELECT,JOIN), identificadores, literales, operadores, paréntesis y comentarios. Los literales de cadena y los identificadores entrecomillados se pasan sin modificar para que la sintaxis específica del dialecto siga funcionando. - Aplica las reglas de diseño. Las cláusulas de nivel superior (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) empiezan en su propia línea. Las expresiones separadas por comas en la lista de selección y las listas de columnas obtienen cada una una línea, con la sangría elegida. - Aplica la capitalización de palabras clave. El selector de capitalización reescribe las palabras clave SQL reconocidas a mayúsculas, minúsculas o preserva la capitalización de la entrada tal cual. Los identificadores nunca se modifican: los nombres de columnas y tablas siempre pasan tal como se escribieron.
- Emite la cadena formateada. El flujo de tokens se une de nuevo en una sola cadena con el carácter de sangría (2 espacios, 4 espacios o tabulación) y la regla de salto de línea configurada. El modo en vivo vuelve a ejecutar todo el proceso con un debounce de 200 ms mientras escribes.
Por qué embellece SQL
- Legibilidad del diff en pull request. Un CTE de 200 líneas reescrito como una sola línea convierte la revisión de código en un juego de adivinanzas. El formateo consistente mantiene el diff limitado al cambio que realmente hiciste — una nueva columna, un
JOINextra, un predicadoWHEREdiferente — para que el revisor pueda verlo sin desenredar espacios en blanco. - Depuración más fácil. Cuando una consulta devuelve un recuento de filas incorrecto, lo primero que haces es leerla línea por línea. El SQL formateado pone cada
JOINen su propia línea y alinea los predicadosWHEREpara que unANDfaltante o unORextraviado salte a la vista. - Estilo de equipo consistente. La mayoría de los equipos adoptan una guía de estilo SQL (dbt Labs, GitLab, Mode Analytics las publican todas) y quieren que cada consulta confirmada la siga. Un formateador ejecutado antes del commit elimina la discusión de estilo de la revisión y deja solo la lógica para debatir.
- Compartir SQL en documentación. Los runbooks, las retrospectivas de incidentes y los documentos de Notion se benefician de un SQL que se lee de arriba a abajo. El SQL formateado se pega limpiamente en un bloque de código delimitado e imprime de forma predecible en exportaciones PDF, sin saltos de línea extraños a mitad de palabra clave.
Aplicaciones comunes
El formateo SQL aparece en ingeniería analítica, desarrollo backend y operaciones siempre que una consulta debe ser leída por alguien que no la escribió.
- Ingeniería analítica: hook de pre-commit en un proyecto dbt que reformatea cada archivo de modelo para que los diffs de PR se limiten a cambios de lógica, no a cambios de espacios en blanco.
- Administración de bases de datos: pegar una entrada de log de consultas lentas en una sola línea, formatearla y recorrer el orden de join mientras se escribe la retrospectiva del incidente.
- Documentación: tomar una consulta de un explore de Looker o un cuaderno de Tableau, formatearla para un runbook e incrustarla como ejemplo listo para copiar y pegar para la rotación de guardia.
Un ejemplo práctico
Pega SELECT u.id,u.email,COUNT(o.id) FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at > '2024-01-01' GROUP BY u.id,u.email ORDER BY u.id; en el panel de entrada con el dialecto establecido en PostgreSQL, sangría de 2 espacios y capitalización MAYÚSCULAS. La salida coloca SELECT, FROM, LEFT JOIN, WHERE, GROUP BY y ORDER BY en sus propias líneas; cada columna de la lista de selección y la lista de agrupación obtiene su propia línea con sangría; y el predicado ON queda un nivel de sangría más profundo que la palabra clave JOIN a la que pertenece.
FAQ
¿Qué dialectos SQL son compatibles?
El menú desplegable de dialectos cubre SQL estándar, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake y Redshift. La biblioteca sql-formatter subyacente también reconoce DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB y SingleStoreDB; elegir el dialecto más cercano produce resultados razonables incluso cuando el objetivo exacto no está en la lista. Los identificadores, literales de cadena y operadores específicos del dialecto (PostgreSQL @>, prefijos SAFE. de BigQuery) se preservan tal cual.
¿Esto valida mi SQL?
No. El formateador es un reescritor léxico, no un analizador. Tokeniza la entrada, aplica las reglas de diseño y emite el resultado; no comprueba si la consulta es semánticamente válida, si las tablas referenciadas existen o si la sintaxis es legal en el dialecto elegido. Ejecuta el resultado formateado a través de la base de datos real (o un linter SQL como SQLFluff) para una verificación de corrección real.
¿Por qué se están poniendo en mayúsculas mis palabras clave?
El menú desplegable de capitalización de palabras clave tiene como valor predeterminado MAYÚSCULAS, que es la convención en la mayoría de las guías de estilo SQL publicadas (dbt Labs, Mode, GitLab). Cambia a minúsculas si tu equipo escribe select / from en minúsculas, o a Preservar si quieres que la salida mantenga la capitalización que escribiste. Los identificadores nunca se ven afectados: solo se reescribe el conjunto de palabras clave reconocidas.
¿Mi consulta se sube a algún lugar?
No. La biblioteca sql-formatter incluida se ejecuta en tu navegador, el formateo ocurre localmente en tu máquina y el texto de la consulta nunca cruza la red. Las únicas solicitudes salientes que hace esta página son las mismas solicitudes de analítica y anuncios que hace cualquier página de tools.ultim8soft.com; el texto SQL en sí no forma parte de ninguna de ellas.
El SQL embellecido deja de ser un argumento de estilo una vez que un formateador lo gestiona. La herramienta se ejecuta completamente en tu navegador, la consulta nunca sale de la página, y el mismo tokenizador consciente del dialecto que impulsa el paquete npm sql-formatter hace la reescritura.