Ну чтож, пример был сделан 

Таблица Test. Содержит 301000 строк. Не спрашивайте почему 301000, а не 300000 

 Ну считаю я плохо...  

CREATE TABLE Test (
	[ID] int IDENTITY (1, 1) NOT NULL,
	FloatField float NULL 
)
 1. Обработка данных в приложенииКусок кода приложения:
	SqlDataReader reader = command.ExecuteReader();
	DateTime start = DateTime.Now;
	ArrayList arrayList = new ArrayList();
	while (reader.Read())
	{
		if (!reader.IsDBNull(1))
		{
			arrayList.Add(reader.GetDouble(1));
		}
		else
		{
			arrayList.Add(-1);
		}
	}
	reader.Close();
	double milliseconds = (DateTime.Now - start).TotalMilliseconds;
	milliseconds = 0;
]
При этом в таблице
а) Все строки "is null". При этом выполнение кода занимает примерно 700-750 миллисекунд
б) Каждая третья строка = 0, остальные NULLы. Время выполнения - в среднем 800-850 миллисекунд
2. Обработка данных в СУБДКак элегантно перевести NULLы в нули прямо в запросе SELECT я не понял, может вы мне подскажете...  

Тогда решил сделать задачу попроще - во всей таблице поставил поля "= 0". Здесь, как и везде, поле ID никак не учитывается, вообще оно было введено только "для порядку"  

Код приложения упростил:
	SqlDataReader reader = command.ExecuteReader();
	DateTime start = DateTime.Now;
	ArrayList arrayList = new ArrayList();
	while (reader.Read())
	{
		arrayList.Add(reader.GetDouble(1));
	}
	reader.Close();
	double milliseconds = (DateTime.Now - start).TotalMilliseconds;
	milliseconds = 0;
Результат меня удивил - 800-850, а то и все 900 с гаком миллисекунд!  

  Получается, что выгоднее обрабатывать NULLы в приложении. Заметьте, что это еще при том, что я не писал замену NULLов на нули в запросе, а просто в БД данные изменил.
Итак, проверки лучше проводить на клиенте, что и требовалось доказать  

  Еще раз прошу обратить внимание, что в моем примере не производилось преобразование данных в корректный вид базой данных, данные уже были корректными, т.е. NULLов не содержали