加入查询 returns 比嵌套 select 查询多行?

Join query returns more rows than nested select query?

我有以下疑问:

SELECT count(*)
FROM User u
INNER JOIN NAME n 
     ON u.UserId = n.UserId
    AND n.last = 'Joe';
--returns 1943

SELECT count(*)
FROM User u
WHERE u.UserId IN (
        SELECT n.UserId
        FROM NAME n
        WHERE n.last = 'Joe'
        );
--returns 1875

UserId 是 table User 中的主键,也是 table Name 中的外键(不唯一)。

为什么连接查询 returns 行比嵌套 select 查询多?他们不应该是一样的吗?

谢谢。

此查询的等效联接:

SELECT count(*)
FROM User u
WHERE u.UserId IN (
        SELECT n.UserId
        FROM NAME n
        WHERE n.last = 'Joe'
       );

将是:

SELECT count(distinct u.UserId)
FROM User u JOIN
     NAME n
     ON n.last = 'Joe' AND u.UserId = n.UserId;

distinct 负责处理重复项。