Il prend la valeur de hs_id
de la requête externe.
Il est parfaitement valide d'avoir une requête qui ne projette aucune colonne de la table sélectionnée dans son select
liste.
Par exemple
select 10 from HotelSupplier where id = 142
renverrait un jeu de résultats avec autant de lignes que correspondant à where
clause et la valeur 10
pour toutes les lignes.
Les références de colonne non qualifiées sont résolues à partir de la portée la plus proche vers l'extérieur, de sorte que cela est simplement traité comme une sous-requête corrélée.
Le résultat de cette requête sera de supprimer toutes les lignes de Photo
où hs_id
n'est pas nul tant que HotelSupplier a au moins une ligne où id =142 (et donc la sous-requête renvoie au moins une ligne)
Cela pourrait être un peu plus clair si vous considérez quel en est l'effet
delete from Photo where Photo.hs_id in (select Photo.hs_id)
Ceci est bien sûr équivalent à
delete from Photo where Photo.hs_id = Photo.hs_id
Soit dit en passant, c'est de loin le "bogue" le plus courant que j'ai personnellement vu signalé à tort sur Microsoft Connect. Erland Sommarskog l'inclut dans sa liste de souhaits pour SET STRICT_CHECKS ON