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.
| Database System | Support Status | Since Version | Notes |
|---|---|---|---|
| MySQL | ✓ Supported | 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 | ✓ Supported | 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 | ✓ Supported | 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 | ✓ Supported | 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. |
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.
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 *.
Full support for both. USING produces a merged column in the output; NATURAL JOIN is effectively shorthand for USING all common column names.
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.
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.