Teradata 左连接删除空值

Teradata left join dropping nulls

在 Teradata 16.20.53.29 中,当我进行左连接和聚合时,如下所示:

select
  b.department,
  sum(a.sales) as sales

from table1 a
  left join table2 b
    on b.product = a.product

where a.date_purchase >= '2018-01-01'
  and a.date_purchase <= '2020-01-01'
  and a.brand = 'ACME'
  and a.quantity > 0

group by 1
order by 1

我希望包含 table1 中而不是 table2 中的缺失行,但它们没有。

输出:

但是,如果我像这样重构查询:

select
   b.department,
   sum(a.sales) as sales

from table1 a
    left join table2 b
        on b.product = a.product
        and a.date_purchase >= '2018-01-01'
        and a.date_purchase <= '2020-01-01'
        and a.brand = 'ACME'
        and a.quantity > 0

group by 1
order by 1

然后包含缺失的行。

输出:

这与我的预期相反,我希望第一个查询包含空值,而第二个查询有效地成为内部联接,从而排除空值。为什么会这样?

查询和结果都是正确的。

案例一。 加入 product 列。如果某些产品没有匹配的密钥,department 将是 null。显然,所有产品都可以加入,where语句按date_purchase、品牌和数量过滤

案例二。 当连接条件中的某些内容不满足时,b 列将为 null。在这种情况下,当 date_purchase 超出范围时,它将 department 标记为 null

在下面的示例中,您可以看到连接条件在未来有 day 个条件,但所有记录都是结果的一部分:

http://sqlfiddle.com/#!9/b3eda88/1