Got it. Thanks. Even though I'd never seen it like that, it is indeed
ambiguous.
In Oracle,
> where
> a.id = b.id(+) and
> (b.weight > 10 OR b IS NULL);
is equivalent to
> ... FROM a LEFT JOIN b ON (a.id = b.id) WHERE b.weight > 10
That is, we get row 2,NULL,NULL.
To produce
> ... FROM a LEFT JOIN b ON (a.id = b.id AND b.weight > 10)
you have to use "in-line views" (Oracle term), like
... FROM a, (select * from table_b where b.weight > 10) b
WHERE a.id = b.id(+);
I guess that finishes it. Let's use STANDARD syntax and that's it. I guess
postgres would need a lot of massage on query parsing to get oracle's
mysterious syntax right.