A Run's result isn't initialized when it's created, so it stays null until a plugin or other build step sets it to something. If you check the build's result early enough in the build process (say, during SCM syncing) then it can still return null. This could be considered a bug against Jenkins, since it's documentation and actual behavior differ in this regard.

https://github.com/jenkinsci/jenkins/blob/master/core/src/main/java/hudson/model/Run.java#L381