sqljoinnatural-join

Difference between natural join and inner join


What is the difference between a natural join and an inner join?


Solution

  • One significant difference between INNER JOIN and NATURAL JOIN is the number of columns returned.

    Consider:

    TableA                           TableB
    +------------+----------+        +--------------------+    
    |Column1     | Column2  |        |Column1  |  Column3 |
    +-----------------------+        +--------------------+
    | 1          |  2       |        | 1       |   3      |
    +------------+----------+        +---------+----------+
    

    The INNER JOIN of TableA and TableB on Column1 will return

    SELECT * FROM TableA AS a INNER JOIN TableB AS b USING (Column1);
    SELECT * FROM TableA AS a INNER JOIN TableB AS b ON a.Column1 = b.Column1;
    
    +------------+-----------+---------------------+    
    | a.Column1  | a.Column2 | b.Column1| b.Column3|
    +------------------------+---------------------+
    | 1          |  2        | 1        |   3      |
    +------------+-----------+----------+----------+
    

    The NATURAL JOIN of TableA and TableB on Column1 will return:

    SELECT * FROM TableA NATURAL JOIN TableB
    +------------+----------+----------+    
    |Column1     | Column2  | Column3  |
    +-----------------------+----------+
    | 1          |  2       |   3      |
    +------------+----------+----------+
    

    The repeated column is avoided.

    (AFAICT from the standard grammar, you can't specify the joining columns in a natural join; the join is strictly name-based. See also Wikipedia.)

    (There's a cheat in the inner join output; the a. and b. parts would not be in the column names; you'd just have column1, column2, column1, column3 as the headings.)