Sql 子查询的列名无效,但返回结果

Sql 子查询的列名无效,但返回结果,sql,sql-server,Sql,Sql Server,此查询中的子查询无效。程序表不包含名为“calcfile”的列。正确的列名为“calc_文件”。但是,当我运行查询时,没有出现错误,结果就像where子句不存在一样。我不应该得到一个错误而不是无效的结果吗 select distinct result from calcdetl where calcfile = (select calcfile from program where program = 'HIGLAS Program') order by result ; 您的查询被解释为:

此查询中的子查询无效。程序表不包含名为“calcfile”的列。正确的列名为“calc_文件”。但是,当我运行查询时,没有出现错误,结果就像where子句不存在一样。我不应该得到一个错误而不是无效的结果吗

select distinct result from calcdetl
where calcfile = (select calcfile from program where program = 'HIGLAS Program')
order by result
;

您的查询被解释为:

select distinct cd.result
from calcdetl cd
where cd.calcfile = (select cd.calcfile from program p where p.program = 'HIGLAS Program')
order by cd.result;
这是完全有效的——它是一个相关子查询

道德的?当查询引用多个表时,始终使用限定列名

如果您编写了以下内容,则会出现错误:

select distinct cd.result
from calcdetl cd
where cd.calcfile = (select p.calcfile from program p where p.program = 'HIGLAS Program')
order by cd.result;