Diferencia entre COUNT(*) y COUNT(1) en SQL

Publicado el 20 septiembre 2024 por Daniel Rodríguez @analyticslane

En una base de datos SQL, cuando se desea obtener el número de filas en una tabla se puede usar COUNT(*) y COUNT(1). Aunque ambos el mismo resultado, existe una distinción sutil pero importante entre ellos. En entrada, se explicará las diferencias y ver cómo pueden afectar el rendimiento de las consultas.

Funcionamiento de COUNT(*)

La función COUNT(*) cuenta el número total de filas en una tabla. Su sintaxis es bastante simple:

SELECT COUNT(*) FROM nombre_de_la_tabla;

Cuando utilizas COUNT(*), el sistema de gestión de bases de datos (DBMS) no se preocupa por los valores de las columnas. En lugar de eso, simplemente cuenta todas las filas (o todas las filas que cumplen el criterio indicado en la consulta). COUNT(*) es generalmente la forma más segura y precisa de contar todas las filas en una tabla.

Funcionamiento de COUNT(1)

La función COUNT(1) también cuenta el número de filas en una tabla, pero se basa en una expresión constante (en este caso, 1). Su sintaxis es similar:

SELECT COUNT(1) FROM nombre_de_la_tabla;

Aquí, COUNT(1) evalúa la expresión 1 para cada fila. Dado que 1 es siempre verdadero y no depende de los valores de las columnas, el comportamiento es esencialmente el mismo que COUNT(*) en la mayoría de los sistemas de bases de datos.

Diferencias y Rendimiento

En términos de funcionalidad, COUNT(*) y COUNT(1) generalmente producen los mismos resultados y tienen un rendimiento equivalente en la mayoría de los motores de bases de datos modernos. Sin embargo, hay algunas diferencias y consideraciones a tener en cuenta:

  1. Optimizaciones del DBMS: Algunos DBMS la ejecución de COUNT(*) suele ser más eficiente que COUNT(1), ya que COUNT(*) está diseñado específicamente para contar filas y puede utilizar los índices de manera más eficaz. En contraste, COUNT(1) implica la evaluación adicional de la expresión constante.
  2. Legibilidad: En términos de legibilidad del código, COUNT(*) es más intuitivo para la mayoría de los desarrolladores. Indicando más claramente la intención de contar todas las filas.
  3. Compatibilidad: Aunque la mayoría de los DBMS tratan COUNT(*) y COUNT(1) de manera similar, algunas bases de datos más antiguas o menos comunes podrían manejar estas funciones de manera diferente. COUNT(*) es el estándar ANSI SQL, lo que garantiza una mayor consistencia en diversas plataformas.

Conclusiones

En resumen, tanto COUNT(*) como COUNT(1) se pueden utilizar para contar el número de filas en una tabla, y en la práctica, los resultados suelen ser los mismos. Sin embargo, COUNT(*) es la opción recomendada por su claridad y compatibilidad con estándares SQL. Si bien la diferencia en el rendimiento puede ser mínima en la mayoría de los casos, es una buena práctica usar COUNT(*) para asegurar una mayor comprensión y mantenimiento del código.

Imagen de Pexels en Pixabay