Sta prendendo il valore di hs_id
dalla query esterna.
È perfettamente valido avere una query che non proietta alcuna colonna dalla tabella selezionata nella sua select
elenco.
Ad esempio
select 10 from HotelSupplier where id = 142
restituirebbe un set di risultati con tante righe quante corrispondono a where
clausola e il valore 10
per tutte le righe.
I riferimenti di colonna non qualificati vengono risolti dall'ambito più vicino verso l'esterno, quindi questo viene trattato semplicemente come una query secondaria correlata.
Il risultato di questa query sarà l'eliminazione di tutte le righe da Photo
dove hs_id
non è null finché HotelSupplier ha almeno una riga in cui id =142 (e quindi la sottoquery restituisce almeno una riga)
Potrebbe essere un po' più chiaro se consideri l'effetto di ciò
delete from Photo where Photo.hs_id in (select Photo.hs_id)
Questo è ovviamente equivalente a
delete from Photo where Photo.hs_id = Photo.hs_id
A proposito, questo è di gran lunga il "bug" più comune che personalmente ho visto erroneamente segnalato su Microsoft Connect. Erland Sommarskog lo include nella sua lista dei desideri per SET STRICT_CHECKS ON