The problem is that subqueries, whether you use 'in' or 'exists' can actually produce worse execution plans than a naive join. Why? The answer is, quite simply, indexes.
I happened to find a Penelope query for a view definition in our production code. I tried the naive join, an 'exists' and an 'in' version. The result is that, without an index on the child select, it just doesn't make a significant difference. I even tried adding the merge_sj hint, but it didn't help.
Addenda: I guess the author is an Oracle consultant after all. I was mislead by a couple unrelated items on the page itself.