23. A method comprising: transforming a first query to a transformed query; wherein the first query includes: a first outer join of a first database object and a second database object, and a first join predicate that specifies a first condition of the first database object for the first outer join, wherein the first join predicate does not reference the second database object; wherein the transformed query does not include the first join predicate but does include: a second predicate that specifies a second condition of the first database object, wherein the second predicate references the second database object; wherein the transformed query is semantically equivalent to the first query; generating an execution plan for executing the transformed query instead of the first query; wherein the method is performed by one or more computing devices.
30. The method of claim 23 , wherein two or more predicates in the first query, including the first join predicate, reference the first database object but not the second database object, and wherein two or more corresponding predicates in the transformed query reference the first database object and the second database object.