I addition to Gorden's answer – In practice the engine will just do the least work, which is to choose the values from the first found row in the group. However – Which row is the first depends on the execution plan, in particular on the chosen index.
Assuming the following schema and data:
CREATE TABLE test (
`lang` VARCHAR(2),
`title` VARCHAR(50),
`url` VARCHAR(50)
) engine=InnoDB;
INSERT INTO test (`lang`, `title`, `url`) VALUES
('pt', 'Livro 1', 'o294jl'),
('en', 'Book 1', 'o294jl'),
('en', 'Book 2', 'o294jl');
Executing the query
SELECT lang, title FROM test GROUP BY url;
returns
| lang | title |
| ---- | ------- |
| pt | Livro 1 |
Which is the first row in insertion order (using the clustered index).
If we now define an index on (url, lang, title)
ALTER TABLE test ADD INDEX url_lang_title (url, lang, title);
The same SELECT query returns
| lang | title |
| ---- | ------ |
| en | Book 1 |
which is the first row in the new url_lang_title
index.
View on DB Fiddle
As you can see: Having exactly same data and exactly same query – MySQL can return different results. And even if you don't change the indices, you can't rely on a particular index being chosen. The engine can choose another index for many other reasons.
The moral of the story: Don't ask what the engine will return. Instead tell it exactly what you want it to return by writing deterministic queries.