HiveBrain v1.2.0
Get Started
← Back to all entries
gotchaCritical

What is the difference between select count(*) and select count(any_non_null_column)?

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
countthewhatdifferencebetweenandselectany_non_null_column

Problem

I seem to remember that (on Oracle) there is a difference between uttering select count(*) from any_table and select count(any_non_null_column) from any_table.

What are the differences between these two statements, if any?

Solution


  • COUNT(*) will include NULLS



  • COUNT(column_or_expression) won't.



This means COUNT(any_non_null_column) will give the same as COUNT(*) of course because there are no NULL values to cause differences.

Generally, COUNT(*) should be better because any index can be used because COUNT(column_or_expression) may not be indexed or SARGable

From ANSI-92 (look for "Scalar expressions 125")


Case:


a) If COUNT(*) is specified, then the result is the cardinality
of T.


b) Otherwise, let TX be the single-column table that is the
result of applying the to each row of T
and eliminating null values. If one or more null values are
eliminated, then a completion condition is raised: warning-
null value eliminated in set function.

The same rules apply to SQL Server and Sybase too at least

Note: COUNT(1) is the same as COUNT(*) because 1 is a non-nullable expression.

Context

StackExchange Database Administrators Q#2511, answer score: 74

Revisions (0)

No revisions yet.