Search code examples
sqlinner-joinhsqldbcross-join

SQL INNER JOIN implemented as implicit JOIN


Recently, I came across an SQL query which looked like this:

SELECT * FROM A, B WHERE A.NUM = B.NUM

To me, it seems as if this will return exactly the same as an INNER JOIN:

SELECT * FROM A INNER JOIN B ON A.NUM = B.NUM

Is there any sane reason why anyone would use a CROSS JOIN here? Edit: it seems as if most SQL applications will automatically use a INNER JOIN here.

The database is HSQLDB


Solution

  • The older syntax is a SQL antipattern. It should be replaced with an inner join anytime you see it. Part of why it is an antipattern is because it is impoosible to tell if a cross join was intended or not if the where clasues is ommitted. This causes many accidental cross joins espcially in complex queries. Further, in some databases (espcially Sql server) the implict outer joins do not work correctly and so people try to combine explicit and implict joins and get bad results without even realizing it. All in all it is a poor practice to even consider using an implict join.