Join syntax that matches columns by name automatically (NATURAL JOIN) or by an explicit shared column list (JOIN ... USING), avoiding repeated column references.
A shorthand for ON when the join column has the same name in both tables, producing cleaner output with a single shared column instead of duplicates. Only works when the column names match exactly; falls back to ON for mismatched names.
Compatibility
| Database System | Support Status | Since Version | Notes |
|---|---|---|---|
| MySQL | Native | 5.0 | Both NATURAL JOIN and USING are supported. NATURAL JOIN matches all columns with identical names; USING matches on the specified list. The joined column appears once in SELECT *. |
| PostgreSQL | Native | 7.4 | Full support for both. USING produces a merged column in the output; NATURAL JOIN is effectively shorthand for USING all common column names. |
| SQL Server | Not Supported | - | Neither NATURAL JOIN nor USING is supported. Use explicit ON clauses. This is a deliberate omission — Microsoft considers NATURAL JOIN ambiguity-prone. |
| Oracle | Native | 9i | Both NATURAL JOIN and USING supported. A known gotcha: NATURAL JOIN silently breaks if a column with a matching name is added to either table later. |
| SQLite | Native | 3.0.0 | NATURAL JOIN and USING are both supported. NATURAL JOIN is parsed but its behavior on ambiguous schemas can be unpredictable — USING is the safer choice. |
Details
SQL Server is the only engine here that rejects both NATURAL JOIN and USING entirely, requiring explicit ON syntax. NATURAL JOIN is universally considered risky in production schemas: any future column added to either table with a name matching a column in the other table silently changes join behavior. USING is safer since the join column is explicit, but it still produces a single merged output column (not two), which can surprise applications expecting column aliases. For maximum portability and least-surprise semantics, ON is recommended for production code.
Standard Syntax
Version Support
Per-Database Syntax & Notes
MySQL Native syntax
Both NATURAL JOIN and USING are supported. NATURAL JOIN matches all columns with identical names; USING matches on the specified list. The joined column appears once in SELECT *.
PostgreSQL Native syntax
Full support for both. USING produces a merged column in the output; NATURAL JOIN is effectively shorthand for USING all common column names.
Oracle Native syntax
Both NATURAL JOIN and USING supported. A known gotcha: NATURAL JOIN silently breaks if a column with a matching name is added to either table later.
SQLite Native syntax
NATURAL JOIN and USING are both supported. NATURAL JOIN is parsed but its behavior on ambiguous schemas can be unpredictable — USING is the safer choice.