Joe Celko's Thinking in Sets: Auxiliary, Temporal, and Virtual Tables in SQL - Celko, Joe (Elsevier, 2011)
Perfectly intelligent programmers often struggle when forced to work with SQL. Why? Joe Celko believes the problem lies with their procedural programming mindset, which keeps them from taking full advantage of the power of declarative languages. The result is overly complex and inefficient code, not to mention lost productivity.