あなたが持っているものは、マイナーな改造で(確かにMS SQLServerのSPROCで)動作します。
if @bool=0 then
select A.* from A
inner join B on B.id=A.id
else if @bool=1 then -- Or just else if @boll is limited to [0,1]
select A.* from A
INNER JOIN B on B.id=A.id
inner join C on C.id=A.id
ただし、注意点として、SQLパラメータスニッフィングは、ダウンする最初のパスのプランをキャッシュします。これは、コード内の他のパスに必ずしも最適ではありません。
また、procにこの「複数の代替クエリ」アプローチを採用する場合は、通常、返される列名とタイプがすべての場合で同一であることを確認することをお勧めします(クエリはA. *であるため問題ありません)。
編集
SQLServerを使用していると仮定すると、別の方法は動的SQLを使用することです。
DECLARE @sql NVARCHAR(MAX)
SET @sql = N'select A.* from A
inner join B on B.id=A.id'
IF @bool = 1
SET @sql = @sql + N' inner join C on C.id=A.id'
sp_executesql @sql
フィルタなどを追加する必要がある場合は、この投稿を参照してください:動的/プログラムでWHERE句をSQLに追加する