最简洁有效的方法在SQL中找到两个集合的不连贯?

use*_*000 1 sql t-sql sql-server query-performance

举一个简单的例子,假设我有两个表

  T1                      T2
=======                 =======
  Val                     Val
=======                 =======
   1                       1
   2                       3
   4                       4
   5                       5
                           6
Run Code Online (Sandbox Code Playgroud)

我想要的结果集是

2
3
6
Run Code Online (Sandbox Code Playgroud)

因为那些是包含在一个而不是另一个中的数字.我知道可以用类似的东西来完成

WITH cte1 (Val) AS (
    SELECT Val
    FROM T1
    LEFT JOIN T2
    ON T1.Val = T2.Val
    WHERE Val IS NOT NULL
),
cte2 (Val) AS (
    SELECT Val
    FROM T2
    LEFT JOIN T1
    ON T1.Val = T2.Val
    WHERE Val IS NOT NULL
)
SELECT *
FROM cte1
UNION WITH cte2
Run Code Online (Sandbox Code Playgroud)

但有更紧凑和/或更有效的方法吗?

Dan*_* E. 6

一个完全外连接应该有一个或一个子句.

SELECT isnull(t1.Val,t2.Val) [Val]
    FROM T1
    FULL OUTER JOIN T2
    ON T1.Val = T2.Val
WHERE T1.Val is null OR T2.Val is null
Run Code Online (Sandbox Code Playgroud)