Por que existe nulo no .NET?

Por que os valores podem ser nulos no .NET? Isso é superior a ter uma garantia em que tudo teria um valor e nada seria nulo?

Alguém sabe como cada uma dessas metodologias é chamada?

De qualquer forma, não tenho muito conhecimento disso, mas não ter um valor para tudo facilita as coisas, em termos de simplicidade, ou seja, eliminar verificações nulas e ser capaz de escrever algoritmos mais simplificados que não precisam se ramificar para cheques.

Quais são os prós e os contras de cada estilo em termos de desempenho, simplicidade, paralelismo, preparação para o futuro, etc.