I think your analysis overlooks some fundamentals. Silvally and Null might basically have the same stats, and Silvally might have a far more diverse movepool, but Silvally is a lot like Gen 2 Kingdra, where although it actually has rather nice stats, and maybe a decent typing, being able to do everything doesn't signify that it's good at doing anything.
For that reason, it might not be better at attacking, but Null is undeniably far better than Silvally, because it can be specialized into a defensive mon. To be fair, with eviolite, it's actually far more bulky than Porygon 2, but whether or not you play it is entirely dependant on the needs of a team, and I can actually attest to Null, because I've played it a lot Gen 7.
https://replay.pokemonshowdown.com/gen7ou-739368251
It's a old replay, but it's a great example. In that replay, I'm easily walling Zard Y's special sun-boosted Fire Blasts and tanking a boosted Cloyster's physical Z move with the same Null. It's notable because Zard Y is the best and hardest hitting unboosted wall breaker in OU, and Cloyster's no different, both are known to break entire teams.
It might be heavily overlooked, but I think Null might be another dark horse, and possibly one of the best ten walls in the game.