If the non-preserved side of the outer join is not count-preserving, for each row from the preserved side, there can be zero, one or multiple matches from the non-preserved side, which means the join can produce one or multiple rows. So it is safe to push a LIMIT through, but it is invalid to push an OFFSET through.
Take this query as an example:
And rows from "dept" and "emp" tables are like:
The expected output is:
While after applying SortJoinTransposeRule, the rel becomes:
And the output will now be:
because deptno "10" has been skipped from the left relation by the pushed through Sort node.