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_ventaproductocantidadprecioSi 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.