I have the following indexed view defined in SQL Server 2008 (you can download a working schema [from gist][1] for testing purposes): CREATE VIEW dbo.balances WITH SCHEMABINDING AS SELECT user_id , currency_id , SUM(transaction_amount) AS balance_amount , COUNT_BIG(*) AS transaction_count FROM dbo.transactions GROUP BY user_id , currency_id ; GO CREATE UNIQUE CLUSTERED INDEX UQ_balances_user_id_currency_id ON dbo.balances ( user_id , currency_id ); GO `user_id`, `currency_id`, and `transaction_amount` are all defined as `NOT NULL` columns in `dbo.transactions`. However, when I look at the view definition in Management Studio's Object Explorer, it marks both `balance_amount` and `transaction_count` as `NULL`-able columns in the view. I've taken a look at several discussions, [this one][2] being the most relevant of them, that suggest some shuffling of functions may help SQL Server recognize that a view column is always `NOT NULL`. No such shuffling is possible in my case, though, since expressions on aggregate functions (e.g. an `ISNULL()` over the `SUM()`) are [not allowed][3] in indexed views. 1. Is there any way I can help SQL Server recognize that `balance_amount` and `transaction_count`are `NOT NULL`-able? 1. If not, should I have any concerns about these columns being mistakenly identified as `NULL`-able? The two concerns I could think of are: - Any application objects mapped to the balances view are getting an incorrect definition of a balance. - In very limited cases, certain optimizations are not available to the Query Optimizer since it does not have a guarantee from the view that these two columns are `NOT NULL`. Is either of these concerns a big deal? Are there any other concerns I should keep in mind? [1]: https://gist.github.com/1207488 [2]: https://stackoverflow.com/questions/2326813/how-to-make-a-view-column-not-null [3]: http://msdn.microsoft.com/en-us/library/dd171921.aspx