EXISTS は式じゃない・・・のかな?

特定の行が存在するかどうかを返すストアドプロシジャを作ろうとしたのですが、以下の問題に・・・

  • EXISTS の真偽値を変数に代入することが出来ない
  • そもそもデータ型に BOOL が無い
  • 戻り値は整数型のみ(関数なら他の型も戻り値にできる)

で、結局以下のように書きました。

create procedure hoge(@Result bit output) as
  if (exists(select * from hoge where foo = 'bar'))
    set @Result = 1
  else
    set @Result = 0

実際にはほかにもいろいろしてたんだけど、こんな感じ。
EXISTS の結果値をそのまま変数に代入できない・・・ってことは、真偽値って式値じゃないのかな?