Não há diferença.
Razão:
Livros on-line dizem "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )"
"1" é uma expressão não nula:portanto, é o mesmo que
COUNT(*) .O otimizador o reconhece pelo que é:trivial. O mesmo que
EXISTS (SELECT * ... ou EXISTS (SELECT 1 ... Exemplo:
SELECT COUNT(1) FROM dbo.tab800krows
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID
SELECT COUNT(*) FROM dbo.tab800krows
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID
Mesmo IO, mesmo plano, as obras
Editar, agosto de 2011
Pergunta semelhante no DBA.SE.
Editar, dezembro de 2011
COUNT(*) é mencionado especificamente em ANSI-92 (procure por "Scalar expressions 125 ")
Caso:
a) Se COUNT(*) for especificado, o resultado será a cardinalidade de T.
Ou seja, o padrão ANSI reconhece como óbvio o que você quer dizer.
COUNT(1) foi otimizado por fornecedores de RDBMS porque desta superstição. Caso contrário, seria avaliado de acordo com o ANSI
b) Caso contrário, seja TX a tabela de coluna única que é o resultado da aplicação daa cada linha de T e eliminando valores nulos. Se um ou mais valores nulos forem eliminados, uma condição de conclusão será gerada:warning-