为什么在这个select语句中没有设置变量?

Md.*_*mud 1 sql database stored-procedures sql-server-2008-r2

我写了以下存储过程:

ALTER PROCEDURE [dbo].[sp_Accounts_ValidateLogin]
   @EmailAddress varchar(255),
   @Password varchar(20)
AS
   DECLARE @UserID int

   SELECT @UserID = UserID 
   FROM Accounts_Users 
   WHERE EmailAddress = @EmailAddress and Password = @Password

   IF @UserID != NULL   
      RETURN @UserID
   ELSE
      RETURN -1
Run Code Online (Sandbox Code Playgroud)

执行此过程时,显示,

No rows affected.
(0 row(s) returned)
@RETURN_VALUE = -1
Run Code Online (Sandbox Code Playgroud)

但每当我重写SELECT声明时,

SELECT UserID 
FROM Accounts_Users 
WHERE EmailAddress = @EmailAddress and Password = @Password
Run Code Online (Sandbox Code Playgroud)

结果是:

UserID                                                                                                                                                                                                                                                           
---------------------------------------------------------------------------------------
3                                                                                                                                                                                                                                                                
No rows affected.
(1 row(s) returned)
@RETURN_VALUE = -1
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么变量@UserID没有得到设置里面第一个选择语句?

Arr*_*ran 5

!= NULL将无法正常工作.

做了:

IF @UserID IS NOT NULL 
Run Code Online (Sandbox Code Playgroud)

下面的SO问题有一些关于原因的信息,所以我不打算重新发布它(它基本上是因为NULL不是实际值):

不等于<>!=运算符为NULL