Learn SQL/Intermediate/Joins/SQL JOIN Using WHERE

SQL JOIN Using WHERE

An older style: list both tables in FROM separated by a comma, and state the join condition in WHERE instead of ON — worth recognizing, not writing.

What & Why

Before JOIN ... ON became standard, the same result was achieved by listing multiple tables in FROM, comma-separated, with the matching condition in WHERE instead — sometimes called an "implicit join." It still works today, but is outdated style.

See How It Works

BUSINESS QUESTION

Marketing reads an older query that links campaign names to lead ids through a WHERE condition.

idnamechannelspendstart_dateend_datestatustarget_segment
1Spring Launchgoogle_ads55000.002024-01-152024-03-31activesmb
2Retention Webinaremail45000.002024-02-102024-04-15activeenterprise
3Finance Retargetinglinkedin50000.002024-03-122024-05-31activeenterprise
4Enterprise Searchgoogle_ads60000.002024-04-012024-06-30activeenterprise
idcampaign_idemailcreated_atqualified_atconverted_atlead_scoresourcecountry
3011ana@example.com2024-01-21 09:10:00+002024-01-22 11:00:00+002024-02-02 10:00:00+0086google_adsUS
3021ben@example.com2024-01-24 12:40:00+00NULLNULL52google_adsCA
3032chloe@example.com2024-02-16 08:30:00+002024-02-18 14:20:00+00NULL74emailGB
3043dev@example.com2024-03-20 17:15:00+002024-03-21 09:00:00+002024-04-04 16:00:00+0091linkedinUS
EXAMPLE QUERY
SELECT
  c.name AS campaign_name,
  l.id AS lead_id
FROM marketing.campaigns c, marketing.leads l
WHERE l.campaign_id = c.id
ORDER BY lead_id;
RESULT — exact output from the displayed Queryflo rows
campaign_namelead_id
Spring Launch301
Spring Launch302
Retention Webinar303
Finance Retargeting304

The legacy WHERE equality produces the same four key matches as an inner join.

Now You Try

Practice this concept

Marketing is reviewing a legacy comma join. Return campaign_name and lead_id for every campaign-lead key match, ordered by lead id.

Available schema
marketing

Prefix tables with marketing.table_name.

campaign_namelead_id
marketing.campaigns
ColumnType
idinteger
nametext
channeltext
spendnumeric
start_datedate
end_datedate
statustext
target_segmenttext
legacy_idtext
marketing.leads
ColumnType
idinteger
campaign_idinteger
emailtext
created_attimestamp with time zone
qualified_attimestamp with time zone
converted_attimestamp with time zone
lead_scoreinteger
sourcetext
countrytext
archive_statustext
query.sql
Intermediate business practice

Sign up free to try it on a real business scenario