У ячеек таблиц вертикальная зависимость. Каждая нижняя ячейка соответствует верхней. Если вы растянули три верхние ячейки, то растянутся и нижние, но в вашем случае некуда девать контент в остальных ячейках, потому браузер высчитывает свою ширину ячейкам. А вот как он ее высчитывает - это надо почитать в спеке или спросить у Selenit'a. *Еще допишу. Именно так, как вы хотите, сделает table-layout: fixed, который заставляет браузер в обязательном порядке читать размеры ячеек первой строки, но последствия его печальны. Остальной контент он выместит за пределы таблицы, либо наложит его один над другой.