Consulta Formateada
Cuándo se aplica el formateador a la entrada anterior, produce:
SELECT
u.id,
u.name,
u.email,
o.total,
o.created_at
FROM users u
INNER JOIN orders o
ON u.id = o.user_id
WHERE
o.created_at >= '2024-01-01'
AND o.status = 'completed'
GROUP BY
u.id,
u.name,
u.email,
o.total,
o.created_at
HAVING COUNT(o.id) > 5
ORDER BY o.total DESC
LIMIT 100;
Cada clausula comienza en su propia línea. Las listas de columnas están dispuestas con un elemento por línea. La condición ON esta alineada debajo de la palabra clave JOIN. Este diseño hace que cada clausula sea escaneable de un vistazo.
Por Que Importa el Formateo SQL
Una consulta de una sola línea funciona bien cuando la escribes. Pero cuando alguien más necesita leerla o vuelves tres meses después para depurarla, se convierte en un problema de mantenimiento.
El SQL formateado acelera varias cosas:
- Revisión de código. El revisor puede verificar las condiciones JOIN, los predicados WHERE y las columnas GROUP BY de forma independiente cuando cada uno está en su propia línea. Una consulta de una sola línea requiere analizar toda la cadena para verificar cualquier parte.
- Depuración. Cuándo una consulta devuelve resultados incorrectos, normalmente aislar el problema comentando clausulas individualmente. El SQL correctamente sangrado simplifica este proceso.
- Encontrar errores de lógica. Las columnas GROUP BY y SELECT desalineadas son una fuente comun de errores de agregación. Cuándo ambas listas tienen formato vertical, los desajustes son inmediatamente visibles.
- Diffs de pull request. Un cambio en una condición WHERE debe aparecer como una sola línea modificada en el diff. En una consulta de una sola línea, cualquier cambio afecta toda la línea y hace que el diff sea inutil para la revisión.
Reglas de Formateo SQL
Las reglas que aparecen en la mayoría de las guias de estilo SQL:
Palabras clave en mayusculas: SELECT, FROM, WHERE, JOIN, ON, GROUP BY, HAVING, ORDER BY, LIMIT. Esto separa el lenguaje estructural de la lógica de la aplicación.
Cada clausula en su propia línea: SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT. Esto evita líneas largas donde las clausulas están apiñadas.
Elementos de lista sangrados: Las columnas después de SELECT, las tablas después de FROM y las columnas después de GROUP BY se sangran. Esto crea una jerarquia visual.
Condiciones JOIN alineadas: La condición ON se sangra debajo de JOIN, no al nivel de SELECT.
Operadores booleanos al inicio de la línea: AND y OR van al principio de la línea, no al final, para que las condiciones sean escaneables verticalmente.
Formateo SQL vs Linteo SQL
El formateo reorganiza los espacios en blanco. El linteo aplica reglas sobre que SQL es aceptable.
SQLFluff hace ambas cosas: formatea y aplica reglas como “no SELECT *”, “los CTEs deben nombrarse” o “las uniones implicitas están prohibidas”. Un linter detecta problemas que un formateador no puede.
Para este formateador online, el objetivo es la legibilidad, no el linteo. Pegalo, formatealo y luego pasalo por un linter si necesitas verificación de reglas.