0Pricing
Coding Interview Prep · Lección

COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)

La pregunta clásica sobre cómo cada forma de COUNT trata los valores NULL y los duplicados

COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT) es una lección gratuita de Coding Interview Prep en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Coding Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Coding Interview Prep incluye 4 lecciones en total.

La pregunta que le harán

Si participa en una entrevista de SQL, espere esta pregunta durante los primeros diez minutos: ¿Cuál es la diferencia entre COUNT(*), COUNT(column) y COUNT(DISTINCT column)?

Parece una pregunta trivial, pero los entrevistadores la utilizan para comprobar si realmente comprende cómo las funciones de agregación tratan los valores NULL y los duplicados. Una respuesta precisa y segura indica que ha escrito consultas reales y no que solo ha memorizado la sintaxis.

En esta lección construiremos un modelo mental sólido para que pueda responder de inmediato y explicar el motivo.

COUNT(*) cuenta filas

COUNT(*) cuenta filas. No examina los valores de ninguna columna, por lo que los NULL son irrelevantes. Si la tabla tiene 100 filas, COUNT(*) devuelve 100, punto.

En este caso, el asterisco no multiplica ni amplía columnas. Es un token especial que significa «contar cada fila que cumpla los criterios». Esta es la forma que debe utilizar cuando la pregunta es simplemente «¿cuántos registros hay?».

SELECT COUNT(*) AS total_rows
FROM employees;

Datos de ejemplo para analizar

Basemos todo en una tabla pequeña. Imagine una tabla employees con una columna department que admite NULL:

  • Alice, Ventas
  • Bob, Ventas
  • Carol, NULL
  • Dan, Ingeniería
  • Eve, NULL

Hay un total de 5 filas. Tres filas tienen un valor de departamento (Ventas, Ventas, Ingeniería) y dos filas tienen NULL. Tenga presentes estas cifras; contaremos esta tabla de tres formas diferentes.

COUNT(column) omite los NULL

COUNT(column) cuenta únicamente las filas en las que esa columna no es NULL. Ignora por completo los valores NULL.

En nuestros datos de ejemplo, COUNT(department) devuelve 3, no 5, porque dos valores de departamento son NULL. Este es el dato más importante de toda la lección: COUNT de una columna nunca cuenta los NULL.

SELECT COUNT(department) AS depts_present
FROM employees;
-- returns 3 on our sample data

Comparación hasta ahora

Comparación en la misma tabla de 5 filas:

  • COUNT(*) = 5 (todas las filas)
  • COUNT(department) = 3 (departamentos no NULL)

La diferencia entre ambos, 5 menos 3, equivale al número de departamentos NULL. Un truco útil para entrevistas: COUNT(*) - COUNT(col) proporciona el número de NULL de una columna sin escribir una cláusula WHERE aparte.

SELECT COUNT(*) - COUNT(department) AS null_departments
FROM employees;
-- returns 2

COUNT(DISTINCT column)

COUNT(DISTINCT column) cuenta el número de valores únicos que no son NULL. Primero elimina los duplicados, después ignora los NULL y, por último, cuenta lo que queda.

En nuestros datos, los valores de departamento distintos son Ventas e Ingeniería, por lo que COUNT(DISTINCT department) devuelve 2. Los dos NULL no cuentan y el valor Ventas duplicado se reduce a uno.

SELECT COUNT(DISTINCT department) AS unique_depts
FROM employees;
-- returns 2

Las tres juntas

La imagen completa de nuestra tabla de 5 filas:

  • COUNT(*) = 5 — filas
  • COUNT(department) = 3 — valores no NULL
  • COUNT(DISTINCT department) = 2 — valores únicos no NULL

Si puede recitar este orden, teniendo en cuenta primero los NULL y después los duplicados, domina todo el concepto. Observe que cada forma devuelve un valor menor o igual que la anterior.

SELECT
  COUNT(*)                       AS rows_total,
  COUNT(department)              AS depts_present,
  COUNT(DISTINCT department)     AS unique_depts
FROM employees;

Una variante de entrevista con solución

Los entrevistadores suelen plantearlo de otra forma: «¿Cuántos empleados están asignados a un departamento y cuántos departamentos distintos existen?»

La primera parte corresponde a COUNT(department) (estar asignado significa no ser NULL). La segunda parte corresponde a COUNT(DISTINCT department). Reconocer qué COUNT corresponde a cada frase es exactamente la habilidad que se evalúa.

SELECT
  COUNT(department)          AS assigned_employees,
  COUNT(DISTINCT department) AS distinct_departments
FROM employees;

COUNT con una condición

Una pregunta de seguimiento habitual es: contar únicamente las filas que cumplen una condición. Un truco claro y portable consiste en aplicar COUNT sobre una expresión CASE. Como COUNT(column) omite los NULL, haga que CASE devuelva NULL para las filas que desea excluir.

Aquí contamos los empleados de Ventas. CASE produce un valor únicamente para las filas de Ventas y NULL en los demás casos, por lo que COUNT suma solo esas filas.

SELECT
  COUNT(CASE WHEN department = 'Sales' THEN 1 END) AS sales_count
FROM employees;
-- returns 2

Errores comunes que debe evitar

Preste atención a estas trampas que los entrevistadores suelen preparar:

  • Suponer que COUNT(column) equivale a COUNT(*) — solo ocurre cuando la columna no contiene ningún NULL.
  • Pensar que COUNT(DISTINCT col) incluye NULL como un valor distinto más — no lo hace.
  • Escribir COUNT(1) esperando que omita los NULL — se comporta como COUNT(*) y cuenta todas las filas.

Menciónelos de forma proactiva en una entrevista para demostrar un conocimiento profundo.

COUNT(1) y COUNT(constant)

Los candidatos suelen preguntar qué es más rápido, COUNT(*) o COUNT(1). La respuesta es que son semánticamente idénticos — ambos cuentan todas las filas independientemente de los NULL — y los optimizadores modernos los tratan igual, por lo que no existe una diferencia real de rendimiento.

La constante dentro de COUNT(1) nunca es NULL, así que nunca se omite ninguna fila. Prefiera COUNT(*) por claridad; es la forma idiomática.

SELECT COUNT(*) AS a, COUNT(1) AS b
FROM employees;
-- a and b are always equal

Comprobación rápida

Ponga a prueba su modelo mental con la tabla de ejemplo.

Resumen

Ahora domina la pregunta sobre agregaciones que más se hace:

  • COUNT(*) cuenta todas las filas, incluidos los NULL.
  • COUNT(column) cuenta únicamente los valores no NULL.
  • COUNT(DISTINCT column) cuenta los valores únicos que no son NULL.
  • COUNT(*) - COUNT(col) proporciona el número de NULL sin esfuerzo adicional.
  • COUNT(1) equivale a COUNT(*) — no omite NULL ni ofrece una diferencia de velocidad.

Expréselo con claridad y justifíquelo. A continuación: cómo SUM y AVG gestionan los NULL.

Preguntas frecuentes

¿La lección «COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)» es gratis?

Sí — el texto completo de «COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Coding Interview Prep, actualiza a CoddyKit PRO. El curso de Coding Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)»?

La pregunta clásica sobre cómo cada forma de COUNT trata los valores NULL y los duplicados Practicas Coding Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Coding Interview Prep?

No se requiere experiencia previa. Coding Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Coding Interview Prep?

Sí. Cada lección de Coding Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. COUNT(*) frente a COUNT(column) frente a COUNT(DISTINCT)
  2. SUM y AVG con valores NULL
  3. MIN, MAX y agregación no numérica
  4. Agregaciones sin GROUP BY
← Volver a Coding Interview Prep