Query execution plans, hints and the fundamental difference between nested loops and hash joins