Hey, all. I had a general SQL question. Often, I find myself needing to use the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made the LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such as subqueries. But short of that, when does it make sense to limit a non-outer join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html ---
My experience has shown either syntax (WHERE vs INNER JOIN) to provide the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular DBMS would "optimize better" with INNER JOIN or WHERE - but I kind of doubt it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing to use the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made the LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such as subqueries. But short of that, when does it make sense to limit a non-outer join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
Just be aware that VFP's SQL lets you get away with that, but not all incarnations of SQL will.
Eric
On Tue, Apr 2, 2019 at 5:22 PM Charlie-gm ccbibleman@gmail.com wrote:
My experience has shown either syntax (WHERE vs INNER JOIN) to provide the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular DBMS would "optimize better" with INNER JOIN or WHERE - but I kind of doubt it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing to
use
the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made
the
LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such as subqueries. But short of that, when does it make sense to limit a
non-outer
join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
Hey Eric,
What do you mean? I have not run into a SQL DBMS that does not support both WHERE and INNER JOIN.
-Charlie
On 4/3/2019 4:35 PM, Eric Selje wrote:
Just be aware that VFP's SQL lets you get away with that, but not all incarnations of SQL will.
Eric
On Tue, Apr 2, 2019 at 5:22 PM Charlie-gm ccbibleman@gmail.com wrote:
My experience has shown either syntax (WHERE vs INNER JOIN) to provide the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular DBMS would "optimize better" with INNER JOIN or WHERE - but I kind of doubt it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing to
use
the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made
the
LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such as subqueries. But short of that, when does it make sense to limit a
non-outer
join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
I don't remember specifically, but when you run into it and start scratching your head wondering why you're getting a syntax error - you'll know! :)
On Wed, Apr 3, 2019 at 3:55 PM Charlie-gm ccbibleman@gmail.com wrote:
Hey Eric,
What do you mean? I have not run into a SQL DBMS that does not support both WHERE and INNER JOIN.
-Charlie
On 4/3/2019 4:35 PM, Eric Selje wrote:
Just be aware that VFP's SQL lets you get away with that, but not all incarnations of SQL will.
Eric
On Tue, Apr 2, 2019 at 5:22 PM Charlie-gm ccbibleman@gmail.com wrote:
My experience has shown either syntax (WHERE vs INNER JOIN) to provide the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular DBMS would "optimize better" with INNER JOIN or WHERE - but I kind of doubt
it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing to
use
the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made
the
LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such
as
subqueries. But short of that, when does it make sense to limit a
non-outer
join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
This StackOverflow question seems to sum it up:
https://stackoverflow.com/questions/1599050/will-ansi-join-vs-non-ansi-join-...
On Wed, Apr 3, 2019 at 4:32 PM Eric Selje Eric@saltydogllc.com wrote:
I don't remember specifically, but when you run into it and start scratching your head wondering why you're getting a syntax error - you'll know! :)
On Wed, Apr 3, 2019 at 3:55 PM Charlie-gm ccbibleman@gmail.com wrote:
Hey Eric,
What do you mean? I have not run into a SQL DBMS that does not support both WHERE and INNER JOIN.
-Charlie
On 4/3/2019 4:35 PM, Eric Selje wrote:
Just be aware that VFP's SQL lets you get away with that, but not all incarnations of SQL will.
Eric
On Tue, Apr 2, 2019 at 5:22 PM Charlie-gm ccbibleman@gmail.com wrote:
My experience has shown either syntax (WHERE vs INNER JOIN) to provide the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular DBMS would "optimize better" with INNER JOIN or WHERE - but I kind of doubt
it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing
to
use
the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made
the
LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to
the
JOIN clause? Obviously, some can't move for syntactical reasons, such
as
subqueries. But short of that, when does it make sense to limit a
non-outer
join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
OK, so we're back to it does not yield a different result (nor an error), but in regards to readability using INNER JOIN is more clear. But we should add that INNER JOIN is the more modern standard of use. One of the responses on Stack Overflow mentions "accidental cross-joins" but I have not experienced that even with my most complicated "WHERE" clauses (of course, like all my code, I sometimes do not get the statement correct on the first try, but that can happen with my "JOINS" as well as my "WHERES" <g>).
-Charlie
On Wed, Apr 3, 2019 at 5:35 PM Eric Selje Eric@saltydogllc.com wrote:
This StackOverflow question seems to sum it up:
https://stackoverflow.com/questions/1599050/will-ansi-join-vs-non-ansi-join-...
On Wed, Apr 3, 2019 at 4:32 PM Eric Selje Eric@saltydogllc.com wrote:
I don't remember specifically, but when you run into it and start scratching your head wondering why you're getting a syntax error - you'll know! :)
On Wed, Apr 3, 2019 at 3:55 PM Charlie-gm ccbibleman@gmail.com wrote:
Hey Eric,
What do you mean? I have not run into a SQL DBMS that does not support both WHERE and INNER JOIN.
-Charlie
On 4/3/2019 4:35 PM, Eric Selje wrote:
Just be aware that VFP's SQL lets you get away with that, but not all incarnations of SQL will.
Eric
On Tue, Apr 2, 2019 at 5:22 PM Charlie-gm ccbibleman@gmail.com
wrote:
My experience has shown either syntax (WHERE vs INNER JOIN) to
provide
the same result without noticeable performance difference.
I think the INNER JOIN syntax was added later in the SQL standards.
If you solely use JOIN statements, one could argue the readability is better (aka more explicit). Other than that, perhaps a particular
DBMS
would "optimize better" with INNER JOIN or WHERE - but I kind of
doubt
it.
-Charlie
On 4/2/2019 6:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing
to
use
the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively
made
the
LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to
the
JOIN clause? Obviously, some can't move for syntactical reasons,
such
as
subqueries. But short of that, when does it make sense to limit a
non-outer
join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]
Garrett,
LEFT JOIN b ON a.key = b.key*AND b.field = 'Value'*
is it the conditions/filters (AND b.field = 'Value') that you are asking about, not the difference between WHERE and JOIN?
If so, then this might help:
https://stackoverflow.com/questions/10517225/filtering-joins-where-vs-on
or this:
https://stackoverflow.com/questions/10297231/where-clause-vs-on-when-using-j...
Frank.
Frank Cazabon
On 02/04/2019 06:05 PM, Garrett Fitzgerald wrote:
Hey, all. I had a general SQL question. Often, I find myself needing to use the syntax:
FROM a LEFT JOIN b ON a.key = b.key AND b.field = 'Value'
because if I filter b.field in the WHERE clause, I've effectively made the LEFT JOIN an inner one.
That makes me wonder, at what point do we stop moving conditions to the JOIN clause? Obviously, some can't move for syntactical reasons, such as subqueries. But short of that, when does it make sense to limit a non-outer join in the join criteria? Never?
--- StripMime Report -- processed MIME parts --- multipart/alternative text/plain (text body -- kept) text/html
[excessive quoting removed by server]