SQL Legible No Es Opcional
Cómo formatear consultas SQL para que tu yo futuro (y compañeros de equipo) no te odien.
Heredas una consulta. Es una línea. 400 caracteres. Múltiples joins, subconsultas y declaraciones CASE todas amontonadas juntas.
Buena suerte entendiéndola.
El formateo SQL no se trata de estética. Se trata de si las consultas son mantenibles.
El Problema Con SQL Denso
SELECT u.id,u.name,o.total,p.name FROM users u JOIN orders o ON u.id=o.user_id JOIN products p ON o.product_id=p.id WHERE o.created_at>'2024-01-01' AND u.status='active' ORDER BY o.total DESC;
¿Dónde está la condición de join? ¿Qué se está filtrando? ¿De qué tabla viene cada columna?
Ahora imagina depurar esto a las 2 AM.
La Misma Consulta, Legible
SELECT
u.id,
u.name,
o.total,
p.name
FROM users u
JOIN orders o ON u.id = o.user_id
JOIN products p ON o.product_id = p.id
WHERE o.created_at > '2024-01-01'
AND u.status = 'active'
ORDER BY o.total DESC;
Cada cláusula tiene su propia línea. Las condiciones se alinean. La estructura es visible.
Reglas de Formateo que Funcionan
Una cláusula por línea. SELECT, FROM, WHERE, ORDER BY cada uno obtiene su propia línea.
Columnas en líneas separadas. Las listas SELECT largas se vuelven escaneables.
Indentar condiciones continuas. Múltiples condiciones WHERE se alinean.
Palabras clave en mayúsculas. SELECT, FROM, WHERE se destacan de nombres de tabla y columnas.
Capitalización consistente. Elige un estilo. Quédate con él.
Formateo de Subconsultas
Las subconsultas se desordenan rápido. Indéntalas claramente:
SELECT *
FROM orders
WHERE user_id IN (
SELECT id
FROM users
WHERE status = 'premium'
)
O usa CTEs cuando las subconsultas se vuelven complejas:
WITH premium_users AS (
SELECT id
FROM users
WHERE status = 'premium'
)
SELECT *
FROM orders
WHERE user_id IN (SELECT id FROM premium_users)
Los CTEs a menudo son más claros que subconsultas anidadas.
Formateo de JOIN
Siempre especifica tipos de join. JOIN solo es INNER JOIN, pero explícito es mejor.
SELECT *
FROM orders o
INNER JOIN users u ON o.user_id = u.id
LEFT JOIN shipping s ON o.id = s.order_id
Pon la condición de join en la misma línea para joins simples. Rompe a la siguiente línea para condiciones complejas.
¿Qué Pasa Con el Rendimiento?
El formateo no afecta la ejecución. Al optimizador de base de datos no le importan los espacios en blanco.
Pero SQL formateado es más fácil de optimizar. Puedes ver la estructura, identificar joins innecesarios, detectar índices faltantes.
SQL ilegible oculta problemas de rendimiento.
Estándares de Equipo
Elige un estilo. Documéntalo. Haz cumplir con formateadores automatizados.
Existen diferentes estilos. Algunos equipos ponen comas al inicio de líneas. Algunos ponen todo en mayúsculas. Algunos no.
La consistencia importa más que qué estilo elijas.
Cada consulta se lee más de lo que se escribe. Formatea para legibilidad. Tus compañeros de equipo (y tu yo futuro) te lo agradecerán.