<t>There is no difference.<br/>
<br/>
Reason:<br/>
<br/>
<br/>
Books on-line says "COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )"<br/>
<br/>
"1" is a non-null expression: so it's the same as COUNT(*).<br/>
The optimizer recognizes it for what it is: trivial.<br/>
<br/>
The same as EXISTS (SELECT * ... or EXISTS (SELECT 1 ...<br/>
<br/>
Example:<br/>
<br/>
SELECT COUNT(1) FROM dbo.tab800krows<br/>
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID<br/>
<br/>
SELECT COUNT(*) FROM dbo.tab800krows<br/>
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID<br/>
<br/>
```<br/>
<br/>
Same IO, same plan, the works<br/>
<br/>
Edit, Aug 2011<br/>
<br/>
[Similar question on DBA.SE](https://dba.stackexchange.com/questions/2511/what-is-the-difference-between-select-count-and-select-countany-non-null-col/2512#2512).<br/>
<br/>
Edit, Dec 2011<br/>
<br/>
`COUNT(*)` is mentioned specifically in [ANSI-92](http://msdn.microsoft.com/en-us/library/ms175997.aspx) (look for "`Scalar expressions 125`")<br/>
<br/>
<br/>
Case:<br/>
<br/>
<br/>
<br/>
a) If COUNT(*) is specified, then the result is the cardinality of T.<br/>
<br/>
That is, the ANSI standard recognizes it as bleeding obvious what you mean. `COUNT(1)` has been optimized out by RDBMS vendors *because* of this superstition. Otherwise it would be evaluated as per ANSI<br/>
<br/>
<br/>
b) Otherwise, let TX be the single-column table that is the<br/>
result of applying the to each row of T<br/>
and eliminating null values. If one or more null values are<br/>
eliminated, then a completion condition is raised: warning-</t>