Well, “better” is subjective. There is some style here. But I’ll address your questions directly.
- Both perform the same
- Both are ANSI-compliant.
-
The problem with the first example is that
-
it is very easy to inadvertently derive the cross product (since it is easier to leave out join criteria)
-
it also becomes difficult to debug the join criteria as you add more and more tables to the join
-
since the old-style outer join (*=) syntax has been deprecated (it has long been documented to return incorrect results), when you need to introduce outer joins, you need to mix new style and old style joins … why promote inconsistency?
-
while it’s not exactly the authority on best practices, Microsoft recommends explicit INNER/OUTER JOIN syntax
-
with the latter method:
- you are using consistent join syntax regardless of inner / outer
- it is tougher (not impossible) to accidentally derive the cross product
- isolating the join criteria from the filter criteria can make debugging easier
-
I wrote the post Kevin pointed to.