Простые способы на самом деле не являются хорошими решениями. Как бы плохо это не звучало, лучшим решением будет иметь явный IF в коде и отдельные запросы:
IF (condition)
SELECT ... FROM Person WHERE ...
ELSE IF (otherCondition)
SELECT ... FROM Person JOIN ... ON ... WHERE ...
ELSE IF (moreCondition)
SELECT ... FROM Persons JOIN ... JOIN ... WHERE ...
Причина этого заключается в том, что если вы пытаетесь создать один отдельный запрос, который соответствует всем трем (или более) условиям, то ядро должно создать один единственный план запроса, который работает в все условия. В T-SQL один оператор равен одному плану. Помните, что планы создаются для общего случая, для любого значения переменной, поэтому результатом всегда является очень и очень плохой план.
Хотя это нелогично и кажется ужасным решением для любого программиста, именно так работают базы данных. Причина, по которой это не является проблемой в 99,99% случаев, заключается в том, что после того, как вы выполнили то, что вы спрашиваете, и поняли, что нужно сделать, разработчики быстро пришли в себя и пересмотрели свои требования, чтобы им никогда не приходилось выполнять запросы, которые необязательно объединяются на основе значений переменных времени выполнения;)