COUNT(*) vs COUNT(column)
Cuál utilizar
A menos que necesites una respuesta muy específica, lo mejor es que utilices el índice *. El optimizador de consultas debería elegir el índice más adecuado.
Existen algunas diferencias en la sintaxis, por lo que podemos echarles un vistazo primero:
COUNT(*) devuelve el número de filas de la tabla
COUNT(COLUMN) devuelve el número de valores no NULL de la columna
COUNT (DISTINCT COLUMN) devuelve el número de valores distintos no NULL de la columna
COUNT (DISTINCT *) no está permitido, para ello tendrías que añadir una cláusula GROUP BY.
Prueba SQL
DECLARE @T TABLE(ID INT IDENTITY(1,1),Val VARCHAR(10))DECLARE @I INT=1WHILE @I<=100 BEGININSERT INTO @T SELECT (CASE WHEN @I % 3 = 0 THEN NULL ELSE @I END)INSERT INTO @T SELECT (CASE WHEN @I % 9 = 0 THEN NULL ELSE @I END)SET @I=@I+1ENDSELECT COUNT(*),COUNT(Val),COUNT(DISTINCT Val)FROM @T
Para terminar
Los resultados devolverán 200, 156 y 89 ya que hemos hecho NULL a todo lo divisible por 3 y a todo lo divisible por 9 hasta 100.
El recuento de columnas tiene una utilidad práctica, pero si sólo necesitas un recuento de filas, utiliza *, sobre todo en columnas no indexadas.