CREATE PROCEDURE [dbo].[usp_GetRegistrationQuestions]
AS
BEGIN
SELECT
t.[RegistrationQuestionType],
r.[RegistrationQuestionReturnType],
q.[RegistrationQuestionID],
q.[RegistrationQuestion]
FROM [dbo].[RegistrationAnswerPeopleCluster] c
INNER JOIN [dbo].[RegistrationQuestionType] t ON c.[RegistrationQuestionTypeID] = t.[RegistrationQuestionTypeID]
INNER JOIN [dbo].[RegistrationQuestionReturnType] r ON c.[RegistrationQuestionReturnTypeID] = r.[RegistrationQuestionReturnTypeID]
RIGHT JOIN [dbo].[RegistrationQuestion] q ON c.[RegistrationQuestionID] = q.[RegistrationQuestionID]
WHERE c.[PeopleID] IS NULL AND c.[Active] = 1
GROUP BY t.[RegistrationQuestionType], r.[RegistrationQuestionReturnType], q.[RegistrationQuestionID], q.[RegistrationQuestion]
ORDER BY q.[RegistrationQuestionID] ASC
END
GO
SELECT DISTINCT
q.[RegistrationQuestionID],
q.[RegistrationQuestion]
FROM [dbo].[RegistrationQuestion] q
WHERE NOT EXISTS (SELECT NULL from [dbo].[RegistrationAnswerPeopleCluster] c where c.[RegistrationQuestionID] = q.[RegistrationQuestionID] and c.[Active] = 1)
ORDER BY q.[RegistrationQuestionID] ASC
Or left join and continue to check c.[PeopleID] IS NULLpublic class RegistrationQuestion
{
public string RegistrationQuestionType { get; set; }
public string RegistrationQuestionReturnType { get; set; }
public int QuestionID { get; set; }
public string Question { get; set; }
public List<RegistrationAnswer> RegistrationAnswers { get; set; }
}
public class RegistrationAnswer
{
public int AnswerID { get; set; }
public string Answer { get; set; }
}
IF EXISTS (SELECT * FROM SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[usp_GetRegistrationQuestions]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[usp_GetRegistrationQuestions];
GO
CREATE PROCEDURE [dbo].[usp_GetRegistrationQuestions]
AS
BEGIN
SELECT
t.[RegistrationQuestionType],
r.[RegistrationQuestionReturnType],
q.[RegistrationQuestionID],
q.[RegistrationQuestion]
FROM [dbo].[RegistrationAnswerPeopleCluster] c
JOIN [dbo].[RegistrationQuestionType] t ON c.[RegistrationQuestionTypeID] = t.[RegistrationQuestionTypeID]
JOIN [dbo].[RegistrationQuestionReturnType] r ON c.[RegistrationQuestionReturnTypeID] = r.[RegistrationQuestionReturnTypeID]
JOIN [dbo].[RegistrationQuestion] q ON c.[RegistrationQuestionID] = q.[RegistrationQuestionID]
WHERE c.[PeopleID] IS NULL AND c.[Active] = 1
GROUP BY t.[RegistrationQuestionType], r.[RegistrationQuestionReturnType], q.[RegistrationQuestionID], q.[RegistrationQuestion]
ORDER BY q.[RegistrationQuestionID] ASC
END
GO
But you can optimize the query execution. Take a look at the actual execution plan. And add proper indicies to support your query.
Depending on the cardinalities also the correct choice of the clustered index is important.