sql >> Base de Datos >  >> RDS >> Sqlserver

sql server 2008 management studio no verifica la sintaxis de mi consulta

Está tomando el valor de hs_id de la consulta externa.

Es perfectamente válido tener una consulta que no proyecte ninguna columna de la tabla seleccionada en su select lista.

Por ejemplo

select 10 from HotelSupplier where id = 142

devolvería un conjunto de resultados con tantas filas como coincidan con el where cláusula y el valor 10 para todas las filas.

Las referencias de columnas no calificadas se resuelven desde el alcance más cercano hacia afuera, por lo que esto solo se trata como una subconsulta correlacionada.

El resultado de esta consulta será eliminar todas las filas de Photo donde hs_id no es nulo siempre que HotelSupplier tenga al menos una fila donde id =142 (por lo que la subconsulta devuelve al menos una fila)

Podría ser un poco más claro si considera cuál es el efecto de esto

delete from Photo  where Photo.hs_id  in (select Photo.hs_id)

Esto es, por supuesto, equivalente a

delete from Photo where Photo.hs_id = Photo.hs_id

Por cierto, este es, de lejos, el "error" más común que personalmente he visto informado erróneamente en Microsoft Connect. Erland Sommarskog lo incluye en su lista de deseos para SET STRICT_CHECKS ON