If you modify the attachment point for a subquery, you must choose a point at which all of the correlation columns are available.This query is correlated to two of the tables in the outer query:
select * from t1, t2, t3 where c12 = 0 and c11 = c21 and c22 = c32 and 0 < (select c31 from t3 where c31 = t1.c11 and c32 = t2.c22)
This plan uses the join order t1, t2, t3, with the subquery nested over the t1-t2 join:
(nl_join (nested (nl_join (i_scan i_c11_c12 t1) (i_scan i_c22 t2) ) (subq (t_scan (table t3 (in (subq 1)))) ) ) (i_scan i_c32 t3) )
Since the subquery requires columns from both outer tables, it would be incorrect to nest it over the scan of t1 or the scan of t2; such errors are silently corrected during optimization.
However, the following abstract plan makes the legal request to nest the subquery over the three-table join:
(nested (nl_join (i_scan i_c11_c12 t1) (i_scan i_c22 t2) (i_scan i_c32 t3) ) (subq (t_scan (table t3 (in (subq 1)))) ) )