The first version sets A to the query result:
SET @A = (SELECT ValueThatDoesntExist FROM dbo.MyTable WHERE MyColumn = 'notfound')
Mostly selectin in a scalar context, and if it does not find a string, it evaluates to null.
The second version sets A for each row in the result set:
SELECT @A = ValueThatDoesntExist FROM dbo.MyTable WHERE MyColumn = 'notfound'
, A . :
declare @a int
select @a = i
from (
select 1
union all select 2
union all select 3
) as SubQueryAlias(i)
order by
i
select @a
3 @a. 3, .