Sql server 场景中各种连接的结果

Sql server 场景中各种连接的结果,sql-server,Sql Server,我有两个表test1和test2,它们都有一列包含一些值 我应用了内部联接和外部联接,但与输出混淆 Create table test1 ( id int) insert into test1 values (1) insert into test1 values (1) insert into test1 values (1) Create table test2 ( id int) insert into test2 values (1) insert into test2 values

我有两个表test1和test2,它们都有一列包含一些值

我应用了内部联接和外部联接,但与输出混淆

Create table test1
( id int)
insert into test1 values (1)
insert into test1 values (1)
insert into test1 values (1)


Create table test2
( id int)
insert into test2 values (1)
insert into test2 values (1)
insert into test2 values (NULL)

select a.id from test1 a inner join test2 b on a.id = b.id
我期待着

1
1
Null
作为内部联接、左联接和右联接的输出

但最初的产出是,

1
1
1
1
1
1

请您帮助我理解所有连接中的这一点。

test1中的三个1中的每一个都与test2中的两个1中的每一个连接起来,这就产生了结果集中的3x2=6行。
test1
中的第一个、第二个和第三个1之间没有什么不同,而
test2
中的第一个和第二个1之间也没有什么不同

此外,请记住以下所有条件:

NULL = 1
NULL <> 1
NULL = NULL
NULL <> NULL
NULL=1
空1
空=空
空值
这些都是假的。所有一侧为NULL的条件都将计算为false。这是因为NULL表示未知值


正如你所看到的,你所期望的是完全错误的。似乎您希望第一行
test1
与第一行
test2
连接起来,依此类推。sql中没有这样的“魔力”——连接的整个逻辑都放在
ON
子句中,该子句如前所述连接了1。

您清楚地理解了我的疑问。我只是在想,只有test1的第一行值为1,才会与test2的第一行值为1连接。但这是错误的。它将在其他表中找到所有1并与之联接。谢谢