En fait, c'est un peu plus compliqué que ça. Chaque navigateur a sa façon bien a lui d'afficher les cadres.
Dans l'ensemble, il faut éviter d'utiliser les pourcentages, c'est vrai, parce que ça complexifie les choses, surtout en hauteur.
En fait, le problème se fait particulièrement sentir quand il y a des cases "vides", sans textes ou images.
Dans ce cas là, il faut les remplirs avec une image GIF transparentes, la plus petite possible (1x1pixels) et de l'aggrandir ensuite artificiellement (avec les parametre width et height de la balise IMG) à la taille de la cellule. Il faut aussi spécifier les paramètres height et width de TD.
Si ceci est fait, tous les navigateurs devraient respecter la taille des cellules.
Dans le cas d'un tableau avec des cellules qui "mordent" sur les autres (avec des colspan et des rowspan), il est conseillé de rajouter une première rangée invisible (de 1 pixel de haut), qui reprend toutes les colones. Toujours avec des images invisibles dedans.
Dans l'ensemble, le code généré par ImageReady ou Fireworks donne des bonnes idées des "trucs" à utiliser pour controler la taille d'un tableau.