The reasons for your two Pokemon being different is EVs, IVs, and natures. Effort Values.
Effort values (Japanese: 努力値 effort values), abbreviated EVs, are attributes which give bonuses to an individual Pokémon's stats and improve differently depending which Pokémon they defeat. Officially, they have been referred to as 基礎ポイント base points in Japanese since Pokémon Gold and Silver and as base stats in English since Pokémon FireRed and LeafGreen.
EVs are points that increase your stats that your Pokemon gain by defeating other Pokemon. Different Pokemon give out different EVs, so a Pokemon that defeat a lot of Pokemon that give out Defense EVs, it will have a better Defense stat. As far as I know, EVs cannot be changed or reset in games before Pokemon X and Y.
Individual values (Japanese: 個体値 individual values), abbreviated IVs, and sometimes referred to as determinant values (DVs) in the context of Generations I and II, are the Pokémon equivalent of genes. They are instrumental in determining the stats of a Pokémon, being responsible for the large variation in stats among untrained Pokémon of the same species.
IVs are basically EVs that are determined when a Pokemon is obtained. IVs cannot be changed in any legitimate way
A Pokémon's Nature usually affects the growth rate of two of its stats, ultimately increasing one of its non-HP stats (Attack, Defense, Special Attack, Special Defense, or Speed) by 10% and decreasing another by 10%.
Natures change how the stats of a Pokemon grow. For example, a Pokemon with the Jolly Nature would have a Speed stat that is increased by 10%, but a Special Attack stat that is decreased by 10%. Like IVs, Natures cannot be changed once a Pokemon is obtained.
In the case of your Pikachu in FireRed, it probably has low Defense EVs and/or IVs, and/or a Nature that lowers Defense/Special Defense.
Sources: This, this, and this