SalesOrderHeaderテーブルに存在しないCustomerIDがCustomerテーブルにあるとします。たとえば、あなたは左の外側が
SELECT c.FirstName, c.LastName, oh.SalesOrderNumber
FROM SalesLT.Customer AS c
LEFT OUTER JOIN SalesLT.SalesOrderHeader AS oh
ON c.CustomerID = oh.CustomerID
を結合を実行すると(それががテーブルを残しているので)あなたは、顧客テーブルからすべてのレコードが表示されます以下の2つの表
Customer Table:
+ --------- + -------- + ---------- +
| Firstname | Lastname | CustomerID |
+ --------- + -------- + ---------- +
| Bob | Dylan | 1 |
| Donald | Trump | 2 |
| Me Myself | and I | 14 |
| Guy | Gisbon | 86 |
| Megan | Meganson | 87 |
+ --------- + -------- + ---------- +
SalesOrderHeader Table:
+ ---------------- + ----------- +
| SalesOrderNumber | CustomerID |
+ ---------------- + ----------- +
| 1681351 | 1 |
| 1354894 | 86 |
| 1354900 | 13 |
| 1351666 | 86 |
+ ---------------- + ----------- +
を考えますSalesOrderHeaderテーブルの一致しないレコードはすべてNULLとして表示されます。あなたはwhere句
WHERE oh.SalesOrderNumber IS NULL
を適用するのであれば私たちの例では、あなたは
Resulting Joined Table
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Bob | Dylan | 1681351 |
| Donald | Trump | null |
| Guy | Gisbon | 1354894 |
| Guy | Gisbon | 1351666 |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
は今、あなたはSalesOrderNumberがnullの結果テーブルのサブセットを選択しているになるだろう。ここでは、
Filter in where clause
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Donald | Trump | null |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
は今のヌルフィルタが結合条件に含まれている第二のクエリ、見てみましょうになるだろう。 SQLはSalesOrderHeaderテーブルからnull SalesOrderNumbersを探します。この例では、nullレコードがないため、Customerテーブルを空のSalesOrderHeaderテーブルに結合しています。結果は次のようになります
Filter in join condition
+ --------- + -------- + ---------------- +
| Firstname | Lastname | SalesOrderNumber |
+ --------- + -------- + ---------------- +
| Bob | Dylan | null |
| Donald | Trump | null |
| Guy | Gisbon | null |
| Megan | Meganson | null |
+ --------- + -------- + ---------------- +
この区別は外部結合でのみ重要です。内部結合を使用している場合、フィルタを結合条件またはwhere句に入れると、同じ結果になります。
2つのクエリは同じです。 – scaisEdge
なぜあなたはそれらを実行しませんか? – Haris
http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins –