COUNT(*) VS COUNT(COLUMNA) EN MYSQL
Una de las confusiones mas comunes, en MySQL, al trabajar con agregaciones es la diferencia entre "COUNT(*)" y "COUNT(columna)". Aunque ambos cuentan filas, el comportamiento frente a valores "NULL" es completamente distinto y puede cambiar el resultado de tus consultas de forma significativa.¿Qué hace cada uno?
| Función | Comportamiento | ¿Cuenta los NULL? |
|---|---|---|
| "COUNT(*)" | Cuenta todas las filas de la tabla (o del resultado filtrado) | Sí |
| "COUNT(columna)" | Cuenta únicamente las filas donde la columna especificada no es NULL | No |
Ejemplo práctico
En la base de datos existe la tabla "empleados":| ID | Nombre | Edad |
|---|---|---|
| 1 | Ana | 25 |
| 2 | Luis | NULL |
| 3 | Pedro | 30 |
Consulta usando COUNT(*)
SELECT COUNT(*)
FROM empleados;
Consulta usando COUNT(*)
SELECT COUNT(Edad)
FROM empleados;
Resumen
- "COUNT(*)" cuenta todas las filas
- "COUNT(columna)" cuenta las filas con valor "NOT NULL" en esa columna
Recomendaciones en MySQL
- Usar "COUNT(*)" cuando quieras saber el número total de registros incluso si tienen nulos.
- Usar "COUNT(columna)" cuando necesites saber cuántos valores válidos (no nulos) tiene una columna concreta.
- Si quieres contar valores distintos no nulos, usar "COUNT(DISTINCT columna)".
- En tablas grandes," COUNT(*)" suele ser muy eficiente porque MySQL puede usar información del motor de almacenamiento especialmente con InnoDB y MyISAM.
Ejemplo
-- Total de empleados
SELECT COUNT(*) AS total_empleados FROM empleados;
-- Empleados con edad registrada
SELECT COUNT(Edad) AS empleados_con_edad FROM empleados;
-- Empleados sin edad registrada
SELECT COUNT(*) - COUNT(Edad) AS empleados_sin_edad FROM empleados;