Las cláusulas WHERE
y HAVING
se usan en SQL para filtrar datos, pero tienen diferencias clave en su aplicación:
WHERE
y HAVING
Cláusula | Se usa para… | Funciona con… | Se evalúa en… |
---|---|---|---|
WHERE |
Filtrar filas antes de la agregación | Columnas individuales | Antes de realizar agregaciones (GROUP BY , SUM() , COUNT() , etc.) |
HAVING |
Filtrar resultados después de la agregación | Funciones de agregación (SUM() , AVG() , COUNT() , etc.) |
Después de realizar agregaciones (GROUP BY ) |
Supongamos que tenemos una tabla ventas
con las siguientes columnas:
id_venta
producto
cantidad
precio
Si queremos obtener solo las ventas del producto 'Laptop'
, usamos WHERE
porque filtramos antes de agrupar:
SELECT producto, SUM(cantidad) AS total_vendido
FROM ventas
WHERE producto = 'Laptop'
GROUP BY producto;
Si queremos obtener solo los productos que han vendido más de 100 unidades en total, usamos HAVING
porque estamos filtrando después de la agregación:
SELECT producto, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY producto
HAVING SUM(cantidad) > 100;
HAVING
en lugar de WHERE
?No, no es eficiente usar HAVING
cuando puedes usar WHERE
. La razón es que HAVING
se aplica después de la agregación, lo que significa que el motor de la base de datos tiene que procesar más datos antes de filtrarlos. Usa WHERE
siempre que sea posible para optimizar la consulta.
✅ Regla general:
WHERE
para filtrar registros antes de agrupar.HAVING
solo cuando necesites filtrar después de una agregación.