Is it redundant to add an extra checksum or CRC in TCP packets to make it possible for the receiver verify whether the data is same with the sent one?

The SHA checksum is used to verify integrity, i.e. that the data was not intentionally modified, while the CRC is meant to protect against bit errors.

The CRC can not be used for tamper resistance, because it can be trivially recomputed after modifying the data.

The TCP checksum is even simpler than a CRC, so its presence is more of a formality these days. Most link level protocols have their own checksums or error correcting codes, so bit errors have become unlikely, but they used to be common with RS-232 links.

The SHA checksum alone does not provide protection, because it also needs to be transmitted, but if you can establish a secure channel for the checksum, it is possible to use an insecure channel for the bulk data and then verify it against the SHA checksum, and be reasonably sure that the data has not been tampered with.