Java developers mix object-oriented thinking with imperative thinking, depending on their levels of: Skill (anyone can code imperatively) Dogma (some use the “Pattern-Pattern”, i.e. the pattern of applying patterns everywhere and giving them names) Mood (true OO is more clumsy to write than imperative code. At first) But when Java developers write SQL, everything changes. SQL is a declarative language that has nothing to do with either object-oriented or imperative thinking. It is very easy to express a query in SQL. It is not so easy to express it optimally or correctly. Not only do developers need to re-think their programming paradigm, they also need to think in terms of set theory.