No usar group by en vez de select distinct

Cuando se trata de encontrar resultados sin repetidos, puedes estar tentado de usar group by en vez de select distinct. Aquí te explicamos por qué no debes hacerlo.

Considera estas dos consultas. Ambas pretenden obtener una lista, sin repeticiones, de los títulos y años de los libros de la BD Biblioteca. Ambas devuelven el mismo resultado. Sin embargo, solo una es correcta conceptualmente.

MAL
select titulo, año, count(*)
from libro
group by titulo, año;
BIEN
select distinct titulo, año
from libro;

Emplear group by en lugar de select distinct cuando se pretende evitar la repetición de valores representa un error conceptual. Es como si usamos un martillo para colocar un tornillo; podría servir, pero es mejor usar un destornillador.

El objetivo de group by es principalmente el análisis de datos. Su uso debería estar acompañado de alguna función de agregación para realizar algún cálculo en los grupos obtenidos.

Por otra parte, select distinct ha de usarse para evitar incluir repetidos en el resultado de una consulta.

Si se trata de eliminar duplicados, select distinct es mucho más intuitivo que group by. Además, es menos “verboso” (hay que escribir menos).

Si consideramos el rendimiento, no hay una conclusión clara, porque depende de muchos factores: tipo de SGBD, tipo de consulta, tamaño de las tablas, existencia de índices... En muchas ocasiones el coste de ejecución será el mismo (incluso el plan de ejecución) en términos generales, y en determinadas circunstancias, diferente. 

No hay comentarios:

Publicar un comentario