Det tager værdien af hs_id
fra den ydre forespørgsel.
Det er helt gyldigt at have en forespørgsel, der ikke projicerer nogen kolonner fra den valgte tabel i dens select
liste.
For eksempel
select 10 from HotelSupplier where id = 142
ville returnere et resultatsæt med så mange rækker som matchede where
klausul og værdien 10
for alle rækker.
Ukvalificerede kolonnereferencer løses fra det nærmeste omfang og udad, så dette bliver bare behandlet som en korreleret underforespørgsel.
Resultatet af denne forespørgsel vil være at slette alle rækker fra Photo
hvor hs_id
er ikke null, så længe HotelSupplier har mindst én række, hvor id =142 (og så underforespørgslen returnerer mindst én række)
Det er måske lidt klarere, hvis du overvejer, hvad effekten af dette er
delete from Photo where Photo.hs_id in (select Photo.hs_id)
Dette svarer naturligvis til
delete from Photo where Photo.hs_id = Photo.hs_id
Dette er i øvrigt langt den mest almindelige "bug", som jeg personligt har set fejlagtigt rapporteret på Microsoft Connect. Erland Sommarskog inkluderer det på sin ønskeliste til SET STRICT_CHECKS ON