What is the difference between -all and ~all in a DNS SPF record? [duplicate]

The tilde and dash identify they different types of failures. Consider a message that doesn't match the parameters specified in the SPF record. Tilde is for a softfail, the message will be accepted and marked if it doesn't match parameters specified. Dash is for a hardfail, the message will be rejected if it doesn't match.

more info here: support.microsoft.com/kb/2640313