Why would the analyzer report potential null in the second example? I honestly don't see anything wrong with this code. There's no indication anywhere that the pointer may be null.
Sink node simply indicates that the execution path is impossible. In this case it indicates that after the analyzer admits that the pointer was dereferenced (in order to proceed with the analysis), it must also admit that the pointer wasn't null to begin with. It's not absolutely necessary to generate an explicit sink node in this case but there's not much harm in that either.