Herramientas

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

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

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

5 horas ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

5 días ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

1 semana ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

2 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

3 semanas ago

This website uses cookies.