Abusos de la estructura case de SQL

AUTOR: Mateo Domínguez Gómez

El uso de la estructura CASE en consultas SQL puede ser una herramienta poderosa para obtener diferentes resultados en función de un conjunto de condiciones. Sin embargo, en ocasiones se puede abusar de su uso, lo que puede llevar a código menos eficiente o incluso incorrecto.

En esta entrada, exploraremos tres ejemplos comunes de abuso de la estructura CASE y cómo evitarlos para mejorar la claridad y eficiencia de nuestras consultas.

Condiciones en outer join (on vs where)

Una de las complicaciones al aplicar un outer join es determinar en qué lugar debemos colocar las condiciones de filtrado para ni perder tuplas que deberían aparecer en el resultado, ni hacer que en éste aparezcan tuplas de más.

Evitar datos repetidos si no se puede usar distinct

A veces ocurre que en el resultado de una consulta obtenemos datos repetidos que surgen del emparejamiento de tuplas de dos tablas (o de la misma tabla si se hace un auto-join). No me refiero a tuplas repetidas (que se evitarían con un distinct) sino a valores repetidos en diferentes columnas del resultado. Pongamos un ejemplo.

Join sin usar foreign key

Muchas veces creéis necesario realizar los joins usando exclusivamente campos que sean claves foráneas entre las tablas, o dicho de otra manera más informal, que hay que usar "los caminitos" que se ven en los diagramas del esquema de la BD). No es necesario; incluso, a veces, hacerlo puede suponer emplear tablas innecesarias que penalizan el rendimiento. Veámoslo en el siguiente ejemplo.

Usar in te puede ahorrar trabajo

El operador in sirve para comprobar la pertenencia de un valor a un conjunto de valores. Su uso es equivalente a una serie de comparaciones individuales concatenadas con operadores or... pero es mucho más corto de escribir.