Привет.
Все дело в том, что вы объединяете одним условием таблицы Users и Category, а вторым запросом фильтруете запись только по category относительно пользователя.
В вашем случае, если вам не нужны другие поля из таблицы users, вы можете вообще убрать эту таблицу из запроса.
То есть будет примерно так.
/*
exec usp_Category_Select '2'
*/
ALTER Procedure [dbo].[usp_Category_Select](
@UserID int
) as
SELECT Category.CategoryID, Category.Category, Category.UserID
FROM [Category]
WHERE Category.UserID = @UserID
Если вам нужен запрос пересечения двух таблиц, то лучше использовать INNER JOIN, чтобы у вас все было наглядно и не запутанно.
/*
exec usp_Category_Select '2'
*/
ALTER Procedure [dbo].[usp_Category_Select](
@UserID int
) as
SELECT [Category].CategoryID, [Category].Category, [Category].UserID, [User].UserID
FROM [User]
INNER JOIN [Category] ON [User].UserID = [Category].UserID /* Это условие пересечения двух таблиц */
WHERE [Category].UserID = @UserID /* Это условие фильтрации по полю UserID */