Проблема в том, что любая функция против NULL имеет значение NULL. В этом случае NULL означает неизвестный.
Если вы вычтите число из неизвестного числа, результат неизвестен.
Если вы вычли неизвестное число из известного числа, результат неизвестен.
Оба номера должны быть известны, чтобы вернуть известный ответ. В этом случае, если один из операндов равен NULL, NULL является правильным ответом.
Однако, если вы предпочитаете видеть 0, а не NULL, используйте ISNULL ():
totalsales - isnull(canceledsales, 0)
В книге SQL AntiPatterns есть целая глава, лучше объясняющая NULL.