XGBOOST - different result between train_test_split and manually splitting
All looks correct, but you have to get to know about some details.

train_test_split splits arrays or matrices into a random train and test subsets. 
If you not specifying random_state, you will get a different result, it means that 
every time when you run your code train and test datasets would have different values each time.

If you fixed specific value like random_state = 42 then yours data in test and train set conserve the same values.

So in the first way splitting,  model is learning on the specific(always the same) chunk of data, which could give a good results, in second way every time model is learning on different chunks of data, so results could be worse(by the way, its looks like overfitting on chunk(in first way of split). 

In general no matter what way you choose, but you have to use cross-validation to create a good performing model.