---
id: sql-inner-join
title: "SQL Inner Join"
category: "Database"
status: "draft"
verification_status: "conceptual"
canonical_id: ""
aliases: ["INNER JOIN", "SQL 내부 조인"]
duplicate_of: ""
source_trust_level: "B"
confidence_score: 0.9
created_at: 2026-07-04
updated_at: 2026-07-04
review_reason: ""
merge_history: []
tags: ["sql", "database", "w3schools", "join", "inner-join"]
raw_sources: ["https://www.w3schools.com/sql/sql_join_inner.asp"]
applied_in: []
github_commit: ""
---

# [[SQL Inner Join]]

## 🎯 한 줄 통찰 (One-line insight)
INNER JOIN — the default join type, so plain JOIN means the same thing — returns only rows that have a match in both tables, discarding anything unmatched. [S1]

## 🧠 핵심 개념 (Core concepts)
- **INNER JOIN** — returns only rows that have matching values in both tables. [S1]
- **JOIN == INNER JOIN** — `JOIN` alone defaults to `INNER JOIN`; the parser treats them identically. [S1]
- **Syntax** — `SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;`. [S1]
- **Multi-table INNER JOIN** — more than two tables can be joined by chaining multiple `INNER JOIN` clauses. [S1]

## 🧩 추출된 패턴 (Extracted patterns)
- **Table-name qualification is a good habit** — prefixing column names with their table (`Products.ProductID`) avoids ambiguity errors when the same column name (e.g. `CategoryID`) exists in both joined tables. [S1]
- **Unmatched rows silently vanish** — a product with no `CategoryID`, or with a `CategoryID` absent from the Categories table, is simply excluded from the result — a common footgun when INNER JOIN is used where LEFT JOIN was intended. [S1]

## 📖 세부 내용 (Details)
- Basic two-table join: `SELECT ProductID, ProductName, CategoryName FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;`. [S1]
- Qualified column names to avoid ambiguity: `SELECT Products.ProductID, Products.ProductName, Categories.CategoryName FROM Products INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;`. [S1]
- `JOIN` is shorthand for `INNER JOIN` — both produce identical results. [S1]
- Joining three tables: `FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID;`. [S1]

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
소스에서 모순되는 정보는 발견되지 않음.

## 🛠️ 적용 사례 (Applied in summary)
현재 발견된 실제 적용 사례가 없습니다 — SQL Aliases 챕터의 테이블 별칭(c, o)이 INNER JOIN 예제에서도 그대로 재사용된다. [S1]

## 💻 코드 패턴 (Code patterns)
Two-table INNER JOIN (SQL):
```sql
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;
```
Three-table INNER JOIN chain (SQL):
```sql
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID;
```

## ✅ 검증 상태 및 신뢰도
- **상태:** draft
- **검증 단계:** conceptual
- **출처 신뢰도:** B (W3Schools — widely used educational reference, not a primary standards body)
- **신뢰 점수:** 0.90
- **중복 검사 결과:** 신규 생성 (New discovery)

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[SQL Tutorial]]
- **관련 개념:** [[SQL Joins]], [[SQL Left Join]], [[SQL Aliases]]
- **참조 맥락:** 매칭되는 행만 필요한 조인 쿼리의 기본 유형 — LEFT/RIGHT/FULL JOIN과 대비해서 이해해야 한다.

## 📚 출처 (Sources)
- [S1] W3Schools — SQL INNER JOIN — https://www.w3schools.com/sql/sql_join_inner.asp

## 📝 변경 이력 (Change history)
- 2026-07-04: Initial draft synthesized from the W3Schools "SQL INNER JOIN" page (Astra wiki-curation, P-Reinforce v3.1 format).
