Vertex normals to vertices

goodbye to everyone!
This is my first post, so surely I'm going to do something wrong.

I looked at some Wavefront .obj files and I noticed that not always the number of vertex normals (when written) correspond to the number of vertex. Why this? Should not it be bijective, that every vertex normal has to match (one-to-one) a vertex?

Those are just a few cases in which the number of vertices in the model's vertex array do not correspond to the number of vertex normals in the model's normal to vertex array ... and I'm confused about this discrepancy.

Those are just a few cases in which the number of vertices in the model's vertex array do not correspond to the number of vertex normals in the model's normal to vertex array ... and I'm confused about this discrepancy.

It occurs for a vertex which belongs to faces separated by a sharp edge.

Similarly, a vertex which lies on a texture seam will have multiple sets of texture coordinates for a single vertex position.

So in OpenGL, you'll have to duplicate those vertices when such cases are happening.

If you use the built-in vertex pulling (recommended), yes.

However, you can implement custom vertex pulling in your shader if you want. With that, you can structure your data any way you want.

You can easily envision why the first can be more efficient than the second. Everything's pipelined to push the right values to the shader at the right times, whereas with the latter the GPU has to wait until some shader calcs occur before it even knows what to pull in.