マークが指摘したように、パフォーマンスの違いを見つけるのに苦労します。他の要因がより重要になると思います。私にとっては、私は常に COALESCE を使用していますが、そのほとんどはすでにあなたまたはマークによって言及されています。
- COALESCEはANSI標準です。コードを移植する場合、心配する必要はありません。個人的には、これはそれほど重要ではありません。Celkoの教室の外で実際にそのようなポートが実際に発生する頻度は低いのですが、一部の人にとってはこれが利点です。
- 読みやすさについて述べたこととは反対に、特にISNULLがブール値(SQL Serverには存在しない)を返す他の言語またはプラットフォームから来ているユーザーにとっては、ISNULLを読むのが難しくなることがあります。確かに、COALESCEはつづりにくいですが、少なくとも誤った仮定につながることはありません。
- COALESCE(a、b、c、d)と言えるように、COALESCEははるかに柔軟性がありますが、ISNULLでは同じことを達成するために多くのネストを行う必要があります。
また、2つの関数を異なるデータ型/精度などで使用している場合、2つの関数を使用してデータ型の優先順位がどのように処理されるかを知っている必要があります。
注意
例外が1つあります。これらは、SQL Serverの現在のバージョンで異なる方法で処理されます。
SELECT COALESCE((SELECT some_aggregate_query),0);
SELECT ISNULL((SELECT some_aggregate_query),0);
COALESCE
バリアントは、実際に実行されますsome_aggregate_query
(値をチェックするために一度、および非ゼロ時に一度はそれを返すために)二回、間、ISNULL
一度だけサブクエリを実行します。ここで、他のいくつかの違いについて説明します。
COALESCE
2回評価さ