Use HAVING instead of WHERE when you want to establish a condition that involves a grouping (aggregating) function.
The difference is when the clause is applied. WHERE is applied much earlier in the creation of the result set and I believe can take advantage of indexes and other optimizations. HAVING is applied much later.
HAVING is usually much slower than using WHERE as the WHERE clause usually is more restrictive earlier on. However, HAVING is very useful when wanting to filter on aggregated or aliased columns as these are created after the application of the WHERE clause.
In other words,
HAVING specifies a search condition for a group or an aggregate function used in SELECT statement.
And,A HAVING clause is like a WHERE clause, but applies only to groups as a whole, whereas the WHERE clause applies to individual rows.
Referece:BOL,online forum:http://saloon.javaranch.com,blog:http://blog.sqlauthority.com