В данной статье мы разберем конструкцию Left Join как более верную альтернативу вложенных запросов и увидим, что объединение (Join) вовсе не сложнее для понимания вложенных запросов к таблицам БД SQL Server.
Итак, имеем БД некоторого заведения. В здании имеются офисы и за каждой уборщицей закреплен определенный набор офисных помещений для уборки.
Тривиальная структура БД может выглядеть так:

Имеется таблица Scrubwoman и зависимая от неё таблица Room. Соответственно, эти таблицы заполнены тестовыми данными.
Теперь выберем из БД тех уборщиц, за которыми не закреплено ни одного офисного помещения:
SELECT *
FROM Scrubwoman
WHERE NOT EXISTS
(SELECT Room.Scrubwoman_id FROM Room
WHERE Scrubwoman.scrub_id=Room.Scrubwoman_id)
Или с использованием псевдонимов для таблиц
SELECT *
FROM Scrubwoman AS Sс
WHERE NOT EXISTS
(SELECT Ro.Scrubwoman_id FROM Room AS Ro
WHERE Sс.scrub_id=Ro.Scrubwoman_id)
Одним из таких запросов мы получим результат:

Но этого можно добиться более элегантным путем – с помощью левого соединения:
SELECT *
FROM Scrubwoman AS Sc
LEFT JOIN Room AS Ro
ON Sc.scrub_id=Ro.Scrubwoman_id
WHERE Ro.Scrubwoman_id is NULL;
Соответственно, результат аналогичный:

Получилось так, что мы выбрали все поля таблицы уборщиц, для которых нет записей в дочерней таблице комнат. Соответственно, поля дочерней таблицы принимают значение null, поскольку соответствующей дочерней записи нет.
Если же мы хотим получить уборщиц, для которых назначены хотя бы по одной комнате, то в условия выборки просто следует добавить оператор NOT:
SELECT *
FROM Scrubwoman AS Sc
LEFT JOIN Room AS Ro
ON Sc.scrub_id=Ro.Scrubwoman_id
WHERE Ro.Scrubwoman_id is NOT NULL;
Но, что б легче было понять систему работы Left Join, поиграйте с простейшим запросом:
SELECT *
FROM Scrubwoman AS Sc
LEFT JOIN Room AS Ro
ON Sc.scrub_id=Ro.Scrubwoman_id

Как видите, мы выбрали все строки из левой таблицы и дополнили их данными из полей дочерней таблицы. Если же дочерней записи не оказывается, то в соответствующих полях значение устанавливается в null. Одним словом, конструкция Left Join объединяет таблицы по правилу равнения на левую таблицу.