当 `joined_table` 为空时,为什么 `FIELD(joined_table.column, NULL) = 0` 不匹配?

Why does `FIELD(joined_table.column, NULL) = 0` not match when the `joined_table` is empty?

FIELD(NULL, NULL) = 0 产生结果,FIELD(table.column_is_null, NULL) = 0 也产生结果,但如果要比较的字符串来自空连接 table 列:

SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
    LEFT JOIN task tj ON FALSE
WHERE FIELD(tj.id, NULL) = 0
LIMIT 10

此查询不会产生任何结果,但如果我删除 WHERE 子句,field_zero 在所有 10 行中为零:

SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
    LEFT JOIN task tj ON FALSE
LIMIT 10

根据文档,FIELDReturns 0 如果未找到 str。”(参见:MySQL 5.7 FIELD documentation

我在记录 FIELD 的网站上搜索了 FIELD 函数的错误以及特殊行为,但找不到任何提及该问题的信息。

这是已知错误吗?

还是我对(LEFT) JOIN的行为有误解?

我强烈怀疑这是 mysql 中的未知错误。

当对空连接 table 中的非字符串使用 COALESCE 时,查询产生结果:

SELECT t.id, FIELD(tj.id, NULL) AS field_zero
FROM task t
    LEFT JOIN task tj ON FALSE
WHERE FIELD(COALESCE(tj.id), NULL) = 0
LIMIT 10