inner joins in oracle inner joins in oracle oracle oracle

inner joins in oracle


I would agree that it is not consistent.

But I would argue that the Oracle implementation is a good thing:

  • when you do a join, you almost always want to include a filter condition, therefore the ON part is mandatory.
  • If you really, really don't want to have a filter condition (are you really sure?), you have to tell Oracle explicitly with CROSS JOIN sytax.

Makes a lot of sense to me not to be 100% consistent - it helps to avoid you mistakes.


SELECT *FROM LoanCROSS JOIN Borrower

No inconsistency.


Oracle also supports the natural join syntax, which joins two tables on the basis of shared column name(s). This would work in your case because both tables have a column called LOAN_NUMBER.

SELECT *FROM LoanNATURAL JOIN Borrower

Now, your same argument could be made in this case, that the use of the keyword natural is strictly unnecessary. But if we follow the logic we end up with a situation in which this statement could be either a cross join or a natural join, depending on the column names:

SELECT *FROM LoanJOIN Borrower

This is clearly undesirable, if only because renaming LOAN.LOAN_NUMBER to LOAN_ID would change the result set.

So, there's your answer: disambiguation.