You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中“=”与“IN”查询行为差异:为何Query1返回多行Query2无结果?

查询行为差异解释

Query 1:col_c = col_c 的过滤逻辑

这个条件是逐行自比较:

  • 当col_c为非NULL值时,col_c = col_c结果为TRUE,符合WHERE子句的过滤要求,行会被保留;
  • 当col_c为NULL时,SQL中NULL = NULL的结果是UNKNOWN,这类行会被WHERE子句自动过滤。
    结合col_timestamp = MAX(col_timestamp)的条件,Query1返回的是所有时间戳等于最大时间戳且col_c非NULL的行,因此会返回大量数据。

Query 2:col_c IN (col_c) 的过滤逻辑

这里的(col_c)会被Snowflake解析为整个表t的col_c值集合(等价于执行SELECT col_c FROM t作为IN的子查询)。核心差异在于IN子句对NULL的特殊处理:

  • 如果表t中存在任何col_c为NULL的行,那么这个集合会包含NULL值;
  • 若满足时间戳条件的行的col_c是唯一值(即表中只有这些行的col_c为该值,其他行的col_c都是NULL),此时判断col_c IN (包含NULL的集合)时,SQL会返回UNKNOWN;
  • 所有结果为UNKNOWN的行都会被WHERE子句过滤,最终Query2返回零行。

内容的提问来源于stack exchange,提问作者slothish1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 01:49:52