[プログラミング][PostgreSQL] 比較演算子の型チェックについて

ちょっとPostgreSQLの関数の挙動について分からないことがあったのでメモ。

通常、比較演算子を使うとき、両者の型が同じでないとエラーになる。

# select '0.0' = 0;
ERROR:  invalid input syntax for integer: "0.0"
#

しかし、関数の返り値については型チェックがうまく働いていないようで、比較処理が実行されてしまう。

# select return_str0() = 0;
 ?column?
----------
 f
(1 row)
# select return_str0() = 0.0;
 ?column?
----------
 t
(1 row)
#

定義した関数は以下になります。返り値の型も明示的に宣言しているのにチェックが働いていないっぽい。今回確認したのはPostgreSQL8.2.4でした。

create function return_str0() returns character
  as $_$
begin
        return '0.0';
end;
$_$
language plpgsql;

これは仕様なのかな?これってPostgreSQL9でも再現するのか気になる。