Richard mentioned this article to me yesterday, and was surprised at what it told him.

To summarize:

SELECT COUNT() has 2 meanings:

  1. Count the number of rows
  2. Count the number of values
Sometimes these are the same thing, but not always.

SELECT COUNT(*) always counts the number of rows in the result

SELECT COUNT(colname) counts the number of times that the column colname is not null

So, if colname is always populated the result will be the same but otherwise the value will be different.