гап добавляется, и при втором и третьем элементах в 50 процентов их суммарная ширина больше 100%, поэтому элемент будет переноситься. Либо уменьшай ширину, либо используй не 50% а как в моем примере flex:1 для указания элементу занимать всю доступную ширину.
и не должно. Ты говоришь стилям "этот элемент должен занимать 100(единицы даже не указаны) ширины, но не больше 50% родителя". Есть ли в этом логика думай сам.