Results in sys.dm_db_index_usage_stats
If an index hasn't been touched at all since start-up, then it isn't in the result from sys.dm_db_index_usage_stats. Doing an outer join to that DMV means columns you pick from it will be NULL. As for those that are 0, they have been touched according to sys.dm_db_index_usage_stats, since it does return a row for that index. 

You should be able to verify doing a SELECT * FROM sys.dm_db_index_usage_stats without involving sys.indexes and see that for "the NULLs" the index isn't retured and for "the 0's" the index is returned and potentially some system scans etc.