For data with lots of features, it's generally the case that many of those features will be unrelated or weakly related to your target variable of interest. It's possible to build a model using even these uninformative features, and you can oftentimes find a pattern in a specific set of samples - with enough features, it's likely that a even a noisy feature appears to be informative in a sample subset (your training data). The problem is that these features are not informative in the general sense, so a model built using these features will perform well on your training data but poorly on unseen test data. This is called overfitting, and it means that your model is too specific to the training data, and does not generalize well.
Feature selection can help to eliminate these irrelevant features before the model-building process, which can greatly improve the performance of many algorithms. You typically want to see similar performance on both the training and test data, which indicates that your model building process performs equally well on both seen and unseen data.
One thing to note, be sure to do your feature selection using the training data only, do not use the full dataset to do feature selection and then split into a train and test set for model building and evaluation. If you do that, you will have tainted your test set with your feature selection, making your test metrics biased and very likely overoptimistic.