From my understanding, SIGPIPE can only occur as the result of a write(), which can (and does) return -1 and set errno to EPIPE<
I think it is to get the error handling correct without requiring a lot of code in everything writing to a pipe.
Some programs ignore the return value of write(); without SIGPIPE they would uselessly generate all output.
Programs that check the return value of write() likely print an error message if it fails; this is inappropriate for a broken pipe as it is not really an error for the whole pipeline.