quarta-feira, 26 de julho de 2017

Set vs Select para atribuir valores

Vejam neste artigo da SQLMagazine a importante diferença entre o uso do SET e do SELECT. Há coisas quase irrelevantes, mas há algumas pérolas no texto, como (1) a parte da subconsulta que retorna múltiplos valores, e (2) da atribuição de NULL.

http://www.sqlmagazine.com.br/artigos/sqlserver/07_SETxSELECT.asp (By Edison Costa)

Vale ressaltar que o erro abaixo:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Só ocorre pela forma da atribuição, e não porque foi usado o SET ou o SELECT.
Assim não dá erro:
SELECT @Variavel = from

Mas assim o erro acontece quando a subquery retorna mais de um resultado:
@Variavel = (subquery)

O caso em que não há o erro o resultado é não-determinístico, pois não sabemos qual valor dos retornados o SQL vai escolher para popular a @variavel.