Seems that this issue is only present when using a NavigationLink inside a navigation bar.
If we use a NavigationLink that's inside the body then everything work correctly.
In my case I need to have the button inside the navigation bar so I created an hidden NavigationLink in the body which will be activated by a button located in the navigation bar.
This works:
struct FirstView: View {
		var body: some View {
				NavigationView {
						Text("First view")
								.navigationBarTitle(Text("First view"), displayMode: .inline)
								.navigationBarItems(trailing:
										NavigationLink("To second", destination: SecondView())
								)
				}
		}
}
struct SecondView: View {
		@State var isNavigationLinkActive = false
		var body: some View {
				VStack {
						Text("Second view")
						NavigationLink("To third", destination: ThirdView(), isActive: $isNavigationLinkActive)
								.hidden()
				}
				.navigationBarTitle(Text("Second view"), displayMode: .inline)
				.navigationBarItems(trailing:
						Button("To third", action: {
								isNavigationLinkActive = true
						})
				)
		}
}
struct ThirdView: View {
		@State var isNavigationLinkActive = false
		var body: some View {
				VStack {
						Text("Third view")
						NavigationLink("To fourth", destination: FourthView(), isActive: $isNavigationLinkActive)
								.hidden()
				}
				.navigationBarTitle(Text("Third view"), displayMode: .inline)
				.navigationBarItems(trailing:
						Button("To fourth", action: {
								isNavigationLinkActive = true
						})
				)
		}
}
struct FourthView: View {
		var body: some View {
				Text("Fourth view")
						.navigationBarTitle(Text("Fourth view"), displayMode: .inline)
		}
}