Saludos
Pienso que el error solo se encuentra en la variable $linha. En el segundo query debes indicarle otro nombre
Código PHP:
<?php
$sql = mysql_query("SELECT id_sub FROM sub_categorias WHERE id_cat = '$categoria'");
while($linha = mysql_fetch_array($sql)){
$id_sub = isset($linha['id_sub']) ? $linha['id_sub'] : null;
$sql = mysql_query("SELECT * FROM portfolio WHERE id_sub = '$id_sub'");
while($linha2 = mysql_fetch_array($sql)){
$link_img = isset($linha2['link']) ? $linha2['link'] : null;
$id_img = isset($linha2['id_img']) ? $linha2['id_img'] : null;
?>
<img src="imagens/portfolio_prueba/<?php echo $link_img ?>" width="40" height="40" alt="texto alt" title="title de la imagen"/>
<?php
}
}
?>