左联接排除匹配记录?

Gif*_*guy 0 sql sql-server join left-join sql-server-2017

传统的左联接返回左表中的所有记录,包括匹配的记录:

在此处输入图片说明

我想使用联接排除匹配的记录,并仅从左侧表返回不匹配的记录:

在此处输入图片说明

下面显示的是到目前为止我想到的代码。
它使用一个WHERE子句来淘汰匹配的记录-但这有点不对劲。
这是最好的方法吗?还是有更好的排他加入方法?

SELECT L.col1 ,
       L.col2 ,
FROM leftTable L
LEFT JOIN rightTable R ON R.col1 = L.col1
WHERE R.id IS NULL ;
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

LEFT JOIN方法很好。它已在许多数据库中进行了优化。我个人更喜欢NOT EXISTS,因为我认为它更简洁:

SELECT L.col1, L.col2
FROM leftTable L
WHERE NOT EXISTS (SELECT 1 FROM rightTable R WHERE R.col1 = L.col1);
Run Code Online (Sandbox Code Playgroud)

也就是说,逻辑位于一个位置(NOT EXISTS表达式),而不是分布在两个查询子句中。