I almost forgot that when we added the OLAP functions, became pretty close to Dr. Codd's two kinds of null. We have a null. That is in the actual data, and the null, that is created by rollups, cubes, and grouping sets. Unfortunately I do not think that grouping () works with outer joins.
https://msdn.microsoft.com/en-us/.../ms178544.aspx
GROUPING is used to distinguish the null values that are returned by ROLLUP, CUBE or GROUPING SETS from standard null values. The NULL returned as the result of a ROLLUP, CUBE or GROUPING SETS operation is a special use of NULL. This acts as a column placeholder in the result set and means all.
Books in Celko Series for Morgan-Kaufmann Publishing
Analytics and OLAP in SQL
Data and Databases: Concepts in Practice
Data, Measurements and Standards in SQL
SQL for Smarties
SQL Programming Style
SQL Puzzles and Answers
Thinking in Sets
Trees and Hierarchies in SQL