Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

sql server 2008 management studio não verificando a sintaxe da minha consulta


Ele está tomando o valor de hs_id da consulta externa.

É perfeitamente válido ter uma consulta que não projete nenhuma coluna da tabela selecionada em seu select Lista.

Por exemplo
select 10 from HotelSupplier where id = 142

retornaria um conjunto de resultados com tantas linhas quantas correspondessem ao where cláusula e o valor 10 para todas as linhas.

Referências de coluna não qualificadas são resolvidas do escopo mais próximo para fora, então isso é tratado apenas como uma subconsulta correlacionada.

O resultado desta consulta será excluir todas as linhas de Photo onde hs_id não é nulo desde que HotelSupplier tenha pelo menos uma linha onde id =142 (e assim a subconsulta retorna pelo menos uma linha)

Pode ser um pouco mais claro se você considerar qual é o efeito disso
delete from Photo  where Photo.hs_id  in (select Photo.hs_id)

É claro que isso é equivalente a
delete from Photo where Photo.hs_id = Photo.hs_id

A propósito, este é de longe o "bug" mais comum que eu pessoalmente vi relatado erroneamente no Microsoft Connect. Erland Sommarskog inclui em sua lista de desejos para SET STRICT_CHECKS ON