• The use of the old-style syntax promoted the entire WHERE clause to the ON clause.  You get the same results as the "wrong" query if you used "LEFT JOIN ... ON S. = O. AND o.rats_filename IS NOT NULL".  The IS NOT NULL condition is being used as a a join condition instead of a filter condition and, since none of the fields are null, has no effect.

    The only mystery to me is how Oracle differentiates join conditions and filter conditions.  Maybe only logical comparisons involving both tables are considered join conditions?