Lección 7
Errores SQL habituales
Evita cross joins accidentales, trampas con null, ventanas de tiempo incorrectas y suposiciones inseguras.
Los errores SQL suelen parecer pequeños en texto pero grandes en comportamiento de producción. Una condición de join faltante, un límite de tiempo incorrecto o un NULL inesperado puede cambiar un informe, una respuesta de API o una migración.
Condiciones de join faltantes o débiles
Si falta una condición de join, la base de datos puede combinar muchas más filas de las previstas. Incluso cuando existe una cláusula ON, asegúrate de que usa la clave correcta e incluye límites de tenant o cuenta cuando tu esquema lo requiera.
Comparaciones con NULL
NULL no es igual a valores ordinarios. Usa IS NULL o IS NOT NULL:
WHERE deleted_at IS NULL
No esperes que deleted_at = NULL se comporte como una comparación normal.
Ventanas de tiempo ambiguas
Los filtros de tiempo deben ser explícitos sobre bordes inclusivos y exclusivos:
WHERE created_at >= '2026-01-01'
AND created_at < '2026-02-01'
Esto suele ser más seguro que intentar incluir el último segundo de un día o mes.
SELECT * en rutas de aplicación
SELECT * es útil mientras exploras, pero arriesgado en código de aplicación. Puede obtener columnas innecesarias, ocultar dependencia de la forma del esquema y dificultar las revisiones.
Conclusión clave
Formatea la consulta, léela cláusula a cláusula y busca las suposiciones pequeñas: claves de join, comportamiento con null, rangos de tiempo y columnas seleccionadas.
El Formateador SQL puede ayudar a exponer esas suposiciones antes de ejecutar o revisar la consulta.