I am going to have to recite from the Gospel of Tom Kyte on this one:
benchmark, benchmark, benchmark
Do not just look at the query plan… tkprof your results to see the timing of these queries. Populate test tables with tens of thousands of rows (using a pl/sql script) and see how these two approaches scale.
But before even doing that, understand what you want out of your query. Do you want a list of distinct values? If yes, then I’d recommend using the DISTINCT operator. That’s what it’s there for. It’s a function the Oracle optimizer understands, and based on your table statistics and use of indexes, it will figure out the best way to do it. Don’t second-guess the optimizer.
More important, Query #1 is simpler to understand. Your successor will appreciate that.
I heartily recommend BOTH of Tom’s books recent books (Efficient Oracle by Design and Expert One on One). I’d go so far to say that they’re required reading.
Hope this points you in a useful direction.