Re: Difference between ON and WHERE in JOINs

From: David Johnston <polobo(at)yahoo(dot)com>
To: Jean-Christophe Boggio <postgresql(at)thefreecat(dot)org>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Difference between ON and WHERE in JOINs
Date: 2012-09-19 00:47:50
Message-ID: 83A0F9FE-64AC-4805-8DA6-B7A83EA98826@yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Sep 18, 2012, at 20:21, Jean-Christophe Boggio <postgresql(at)thefreecat(dot)org> wrote:

> I'm looking for an article that explains the difference between these constructs IN POSTGRESQL (the rules seem to differ from one DB to another) :
>
> SELECT A.*
> FROM A
> JOIN B ON a.id=b.id AND A.somefield='somevalue'
>
> and
>
> SELECT A.*
> FROM A
> JOIN B ON a.id=b.id
> WHERE A.somefield='somevalue'
>
>
> I have noticed big differences though I don't know the rules and I've been bitten several times recently. Time to learn.
>
> Thanks,
>
> JC
>

There is no difference in your example. Conceptually though I suggest using only table-table conditions in an ON clause and placing any table-value conditions into the where.

The main time you get differences is when you use OUTER JOIN constructions since the order of filtering can affect the final result. With an inner join the order of evaluation doesn't matter since all valid results will have a record from both sides of the join.

This really shouldn't be platform specific as it is the core of SQL standard. If you want to actually show examples with "big differences" maybe someone can explain the reason. Otherwise the documentation is excellent to explore what syntax is available in PostgreSQL. The SELECT SQL command is the defining location.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Eden Cardim 2012-09-19 01:49:51 Re: Column aliases in WHERE clauses
Previous Message Guilherme Rodrigues 2012-09-19 00:25:42 Re: Change key primary for key foreign