O comando break interrompe o loop em que ele está inserido e o faz sair do loop. No seu código, o break está dentro do segundo loop, ou seja, ele só vai interromper o segundo loop e não o primeiro.
O primeiro loop é responsável por controlar as linhas da saída, enquanto o segundo loop é responsável por controlar as colunas. Cada vez que o segundo loop termina a iteração, ele vai para a próxima linha e a saída de uma nova linha é dada pelo System.out.println().
Então, mesmo que o break interrompa o segundo loop, o primeiro loop vai continuar a execução até atingir o seu limite. Isso faz com que sejam impressas mais de uma linha na saída.
o código pode ser escrito de duas formas:
Opção 1:
for (int linha = 0; linha < 10; linha++) {
for (int coluna = 0; coluna <= linha; coluna++) {
System.out.print("*");
}
System.out.println();
}
Opção 2:
for (int linha = 0; linha < 10; linha++) {
for (int coluna = 0; coluna < 10; coluna++) {
if (coluna > linha) {
break;
}
System.out.print("*");
}
System.out.println();
}
A primeira opção remove o break e o segundo loop só será interrompido quando a variável coluna atingir o valor da variável linha. Já a segunda opção mantém o break, mas a condição de parada do segundo loop é mudada para coluna < 10, o que faz com que o loop execute 10 iterações independentemente da condição de interrupção do break.
Espero ter conseguido esclarecer sua dúvida! Se tiver mais alguma pergunta, sinta-se à vontade para perguntar.